ניהול DFS יעיל עם תסריטים ב-PowerShell

הכנו עצמך ללמוד כיצד לכתוב סקריפטים יעילים יותר ב-PowerShell על DFS באמצעות הידע שתרכוש במדריך הזה. בפוסט זה, תלמד הכל על ניהול קישורי DFS ב-PowerShell!

פוסט הבלוג הזה מצורף בסרטון משותף שנוצר על ידי תורם מ- TechSnips, Scott Hurst. נפנה לך לצפייה, או, אם אתה מעדיף טקסט, תמשיך לקרוא!

הסרטונים האחרונים שלי

קישורי מערכת הקבצים המבוזרת (DFS) יפחיתו את המורכבות בעבודה עם חלוקות קבצים ברשת. קישורי DFS מאפשרים למשתמשים וליישומים לגשת אל שם נתיב וירטואלי להתחבר לתיקיות משותפות. תוכל ל יצור קישורי DFS באמצעות PowerShell.

בין אם אתה ניהול את ה-Active Directory או מוצר DFS אחר, כתיבת סקריפטים ב-PowerShell על DFS יעזור לך לטפח את הבעיות שתתקל בהן.

ה- שם מרחב וירטואלי הזה מאפשר למנהלים להציג תיקיות משותפות הממוקמות בשרתים שונים, או אפילו לשנות מיקום של תיקיית משותף, לגמרי שקוף לצרכני התיקייה ההיא.

המשתמשים לא יצטרכו לעדכן סימניונים, ויישומים לא יהיו חייבים להתעדכן עם נתיבים חדשים כאשר שרתי הקבצים משתנים.

יתרונות של DFS

למשתמשים, נגישות לתיקיות משותפות ברשת מפושטת לתבנית <שם מרחב וירטואלי>\שם תיקייה, הפחותות את המורכבות הקשורה לתיקיות המאוחסנות בשרתים רחוקים.

ליישומים, נתיבים מקודדים קשיחים למשאבים ברשת אינם צריכים להשתנות עקב שינוי בנתיב הרשת. עדכון פשוט לקישור DFS והיישום ימשיך לגשת למשאבים במיקומם החדשים.

דרישות מוקדמות עבור תפקיד שרת DFS

  • Active Directory
  • תפקיד שירותי קבצים ואחסון מותקנים על שרת Windows
  • שרת Windows (ערוץ חצי-שנתי)
  • שרת Windows 2016
  • שרת Windows 2012 R2
  • שרת Windows 2012
  • שרת Windows 2008 R2 Datacenter/Enterprise

דרישות מוקדמות

  • חשבון מנהל עם הרשאות המתאימות
  • כלי RSAT עם 'כלי שירותים קובץ – כלי ניהול DFS' מותקנים

התקנה של סקריפטי פווה של PowerShell DSC שלך

ראשית, עליך להוריד ולהתקין RSAT. לאחר מכן, עליך להתקין את כל התכונות הנדרשות. זה יתקין את ממשק ה-GUI של DFS Management, את מודול ה-DFS Namespaces של PowerShell ליצירת קישורי DFS באמצעות PowerShell וניהולם, וכלי פקודה, אך הוא אינו מתקין שירותי DFS על השרת.

Install-WindowsFeature FS-DFS-Namespace, RSAT-DFS-Mgmt-Con

פקודות DFS נפוצות

ניתן לנהל מרחבי שמות באמצעות ממשק ה-GUI של DFS Management, פקודות הקודש הנפרדות (DFSN) ב-PowerShell, פקודות DfsUtil או סקריפטים שקוראים ל-WMI.

כמה פקודות PowerShell נפוצות הן:

  • Get-DfsnRoot – גילוי כל המרחביות של DFS בדומיין הנוכחי – השימוש הנפוץ ביותר הוא בדיקת המרחביות הזמינות בדומיין הנוכחי
  • New-DfsnFolder – יצירת שם תיקיה חדשה של DFS
    – השימוש הנפוץ ביותר הוא ביצירת תיקיה חדשה של DFS במרחב השמות
  • New-DfsnFolderTarget – הקצאת נתיבים לתיקיה של DFS
    – השימוש הנפוץ ביותר הוא בהקצאת נתיב או יותר לתיקיה של DFS
  • Remove-DfsnFolderTarget – מסירת נתיב מתוך תיקיה של DFS, אך אינה מסירה את התיקיה של DFS
    – השימוש הנפוץ ביותר הוא בהסרת נתיב או יותר מתוך תיקיה של DFS
  • Remove-DfsnFolder – מסירת תיקיה וכל הנתיבים שבתוכה
    – השימוש הנפוץ ביותר הוא בהסרת תיקיה של DFS ממרחב השמות

מציאת מרחביות של DFS

נתחיל על ידי קבלת רעיון על כל המרחביות המקוונות והזמינות בדומיין הנוכחי באמצעות פקודת ה-Get-DfsnRoot.

$Domain = 'tech.io'
(Get-DfsnRoot -Domain $Domain).Where( {$_.State -eq 'Online'} ) | Select-Object -ExpandProperty Path

מתוך הפלט הזה, אנו רואים שישנם שני מרחביות המופעלות בדומיין זה.

Finding DFS roots

מציאת תיקיות של DFS

על ידי השימוש בפקודת Get-DfsnFolder אנו יכולים לרשום את התיקיות של DFS בכל מרחב שמות.

$Domain = 'tech.io'
Get-DfsnFolder -Path "\\$Domain\AppRoot\*" | Select-Object -ExpandProperty Path
Get-DfsnFolder -Path "\\$Domain\DFSRoot\*" | Select-Object -ExpandProperty Path

מתוך הפלט הזה, אנו רואים שב- מרחב השמות AppRoot אין תיקיה של DFS בשם PowerShell.

Finding DFS folders

בדוגמה זו, יש לנו תיקייה שמוכפלת בשם PowerShell על שלושת שרתי הקבצים שלנו; FileServer01, FileServer02 ו־Datacenter.

המטרה היא לשתף את התיקייה המשוכפלת הזו עם המנהלים שלנו באמצעות נתיב יחיד.

על מנת לעשות זאת, ניצור תיקיית DFS קישור חדשה במרחב השמות AppRoot בשם PowerShell באמצעות New-DfsnFolder ונפנה אותו לשיתוף הקבצים של שרת המרכז לנתיב. נגדיר את התיקייה DFS להיות מקוון ונגדיר את TargetPath להיות מקוון.

$Domain = 'tech.io'
try {
    Get-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell" -ErrorAction Stop
} catch {
    Write-Host "Path not found. Clear to proceed" -ForegroundColor Green
}

$NewDFSFolder = @{
    Path = "\\$Domain\AppRoot\PowerShell"
    State = 'Online'
    TargetPath = '\\datacenter\FileShare\PowerShell'
    TargetState = 'Online'
    ReferralPriorityClass = 'globalhigh'
}

New-DfsnFolder @NewDFSFolder

# בדיקה שהתיקייה קיימת כעת:
Get-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell"

# בדיקה שהקישור DFS החדש עובד באמצעות מערכת הפעלה Windows Explorer
Invoke-Expression "explorer '\\$Domain\AppRoot\PowerShell\'"

ב-GUI של ניהול DFS, אנו רואים שהתיקייה DFS PowerShell אינה קיימת.

Inspecting DFS folders in the GUI
The folder target UNC path

נפעיל את מערכת הפעלה Windows Explorer דרך מקלט PowerShell ונאשר שהיא לא קיימת.

Invoke-Expression "explorer "\\$Domain\AppRoot\PowerShell"

אם התיקייה אינה קיימת, התוכנית תכתוב את הפלט Path not found. Clear to proceed בטקסט ירוק בחלון הטרמינל כפי שאתה רואה למטה.

מהפלט אנו רואים שהתיקייה נוצרה, ה־Referral Priority Class מוגדר להיות Global-High והמצב מוגדר להיות מקוון.

Inspecting DFS referral priority class and state

ה-GUI מאשר גם את מה שפוורשל אמר לנו.

Inspecting DFS referral priority class and state

והנתיב שלנו כעת זמין ב-Windows Explorer.

DFS path available in Windows Explorer

יצירת מטרות תיקיות DFS

מאחלים עתה שיצרנו בהצלחה את ה-Powershell DFS תיקייה ב-מרחב השמות, נוסיף נתיב תיקייה יעד נוסף ונקבע את הנתיב הזה כ-מקוון באמצעות New-DfsnFolderTarget. סקריפטים של DFS PowerShell מאפשרים לך להוסיף כמות שתרצה של רכיבים.

$Domain = 'tech.io'

## פשוט את ההגדרות לטובת קריאות
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Online'
}

## הוסף תיקייה חדשה הנמצאת בשרת 'FileServer01' וקבע אותה כ-מקוונת
New-DfsnFolderTarget @NewTPS

עד כה, יש לנו שתיים מתוך שלוש נתיבי שרת שלנו, נוספו והן מקוונות. לתיקייה האחרונה שלנו, נרצה להוסיף את הנתיב אך לא להפוך אותו לזמין למשתמשים. אז נוסיף תיקיית יעד ל-PowerShell DFS תיקייה והפעם נקבע את מצב הנתיב של DFS ללא קשר בעזרת New-DfsnFolderTarget.

$Domain = 'tech.io'
## פשוט את ההגדרות לטובת קריאות
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Offline'
}

## הוסף תיקייה חדשה הנמצאת בשרת 'FileServer02' וקבע ללא קשר
New-DfsnFolderTarget @NewTPS
## בדוק שהתיקייה קיימת כעת:
Creating a new DFS folder target

אתה יכול לראות שהנתיב של FileServer01 ושל מרכז המידע נמצא כרגע במצב מקוון והמצב של FileServer02 הוגדר ל-לא מקוון.

DFS path status

הגדרת מצב הנתיבים של DFS ללא קשר או במקוון

אנו יכולים גם לשנות אילו שרתים יהיו המארחים מקוונים ו- מנותקים, ואפשר אף להחליט איזה מהשרתים יהיה המארח הראשי של נתיב הקובץ באמצעות Set-DfsnFolderTarget.

$Domain = 'tech.io'

## Splatting the settings where the path pointed at the server named FileServer01
$ChangeTPsFS1 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Offline'
}

## Set folder located on the server path 'FileServer01' to Offline
Set-DfsnFolderTarget @ChangeTPsFS1

## Splatting the settings where the path pointed at the server named FileServer02
$ChangeTPsFS2 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Online'
    ReferralPriorityClass = 'globalhigh'
}

## Set folder located on the 'FileServer02' server to Online
Set-DfsnFolderTarget @ChangeTPsFS2

## Splatting the settings where the path pointed at the server named Datacenter
$ChangeTPsFS3 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\datacenter\FileShare\PowerShell'
    ReferralPriorityClass = 'sitecostnormal'
}

## Change Priority of 'Datacenter' server folder path to 'Normal'
Set-DfsnFolderTarget @ChangeTPsFS3

כפי שניתן לראות למטה:

  • נתיב הקובץ של FileServer01 השתנה למצב מנותק
  • השרת Datacenter החליף את ReferralPriorityClass ל- sitecost-normal מתוך global-high
  • נתיב הקובץ של FileServer02 שינה את מצבו ל- מקוון
  • ה- ReferralPriorityClass של FileServer02 החליף ל- global-high
New status of DFS

הסרת נתיבי היעד של תיקיות DFS באמצעות PowerShell

I try to vaccinate my code against the fat finger flu as much as possible. Here we will try to install a safety net before removing one of the folders by making sure that it is offline before deleting it.

# בדיקת נתיב היעד לשרת 'FileServer01' למצב מנותק והסרת נתיב היעד של התיקייה
if ((Get-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell" -TargetPath '\\FileServer01\FileShare\PowerShell').State -eq "Offline") {
    Remove-DfsnFolderTarget -Path "\\$Domain\AppRoot\PowerShell" -TargetPath '\\FileServer01\FileShare\PowerShell' -Force:$true
}

להתראות FileServer01!

FileServer01 folder is removed

לאלה שמעדיפים לוותר על האפשרות של הרשת הבטיחותית, אנו יכולים להתאים את עצמנו אליכם, נפשות אמיצות, גם.

$Domain = 'tech.io'

## זרימת ההגדרות בהם נקבע הנתיב לשרת בשם 'FileServer02'
$DelFTS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
}

## מחיקת התיקייה DFS FolderTarget
Remove-DfsnFolderTarget @DelFTS -Force:$true

אנו אומרים ביי לתיקיית FileServer02.

FileServer02 fodder is removed

הסרת תיקיות DFS

זה היה נתיב ארוך ומסובך, אך הגיע הזמן לקישור ה-DFS שלנו להסתיים. אנו יכולים להסיר את התיקייה של PowerShell ואת קישור ה-DFS באמצעות cmdlet של Remove-DfsnFolder.

$Domain = 'tech.io'

## מחיקת התיקייה DFS
Remove-DfsnFolder -Path "\$Domain\AppRoot\PowerShell" -Force:$true
Removing DFS folder

A quick double-check of the DFS Management GUI shows our DFS link is no more.

Confirming DFS folder removal

סיכום

זהו! עברת על דרך מתופצלת של DFS ו-PowerShell קונג פו. על ידי עכשיו אני מקווה שיש לך קטעי קוד כדי לעזור לך לבנות סקריפטים טובים יותר של PowerShell DFS!

Source:
https://adamtheautomator.com/dfs-powershell-scripts/