Эффективное управление DFS с помощью сценариев PowerShell

Приготовьтесь узнать, как писать лучшие сценарии PowerShell DFS, используя знания, которые вы получите в этом учебнике. В этом посте вы узнаете все о управлении ссылками DFS в PowerShell!

Этот блог имеет сопутствующее видео, созданное участником TechSnips, Скоттом Херстом. Не стесняйтесь посмотреть его или, если предпочитаете текст, читайте дальше!

Мои последние видео

Система распределенных файлов (DFS) уменьшает сложность работы с сетевыми файловыми ресурсами. Ссылки DFS позволяют пользователям и приложениям получать доступ к виртуальному имени пути для подключения к общим папкам. Вы можете создавать ссылки DFS с помощью PowerShell.

Будь то управление службой каталогов Active Directory или другим продуктом DFS, написание сценариев PowerShell DFS поможет вам решить любые проблемы, с которыми вы столкнетесь.

Это виртуальное пространство имен позволяет администраторам представлять общие папки, расположенные на разных серверах, или даже изменять местоположение общей папки, полностью незаметно для потребителей этой папки.

Пользователям не потребуется обновлять закладки, и приложениям не потребуется обновляться с новыми путями при изменении файловых серверов.

Преимущества DFS

Для пользователей доступ к общим папкам сетевых ресурсов упрощается до формата <пространство_имен>\ИмяПапки, что уменьшает сложность, связанную с папками, хранящимися на удаленных серверах.

Для приложений жёстко закодированные пути к ресурсам в сети не обязательно изменять из-за изменения сетевого пути. Простое обновление ссылки DFS и приложение будет продолжать получать доступ к ресурсам по новому местоположению.

Требования к роли сервера DFS

  • Служба каталога Active Directory
  • Роль файловых и хранилищеских служб, установленная на сервере Windows
  • Windows Server (полугодовой канал)
  • Windows Server 2016
  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2 Datacenter/Enterprise

Предварительные требования

  • Учётная запись администратора с необходимыми разрешениями
  • Инструменты RSAT с установленными «Инструментами управления файловыми службами – Инструментами управления DFS»

Настройка сценариев PowerShell для DSC

Сначала скачайте и установите RSAT. Затем установите все необходимые функции Windows. Это установит GUI управления DFS, модуль пространств имен DFS для Windows PowerShell для создания и управления DFS ссылками с помощью PowerShell и их управления, а также инструменты командной строки, но не установит какие-либо службы DFS на сервере.

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

Общие команды DFS

Вы можете управлять пространствами имен с помощью GUI управления DFS, cmdlet’ов пространства имен DFS (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

Это показывает, что в этом домене есть два пространства имен, которые находятся в состоянии Online.

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 link в пространстве имен AppRoot с именем PowerShell с помощью New-DfsnFolder и направим ее на файловую общую папку сервера Datacenter. Мы установим состояние папки DFS Online и состояние TargetPath Online.

$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
Invoke-Expression "explorer '\\$Domain\AppRoot\PowerShell\'"

В графическом интерфейсе управления DFS мы видим, что папка DFS PowerShell не существует.

Inspecting DFS folders in the GUI
The folder target UNC path

Теперь давайте выполним Проводник Windows из консоли PowerShell и подтвердим, что она не существует.

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

Если папка не существует, она напишет вывод Path not found. Clear to proceed зеленым текстом в окне терминала, как показано ниже.

Из вывода видно, что папка была создана, Referral Priority Class установлен в Global-High, а StateOnline.

Inspecting DFS referral priority class and state

Графический интерфейс также подтверждает то, что сказал PowerShell.

Inspecting DFS referral priority class and state

и наш путь теперь доступен в Проводнике Windows.

DFS path available in Windows Explorer

Создание целей папки DFS

Теперь, когда мы успешно создали Powershell DFS папку в пространстве имен, добавьте дополнительный путь к целевой папке и установите этот путь как Online с использованием New-DfsnFolderTarget. Скрипты DFS PowerShell позволяют добавлять любое количество компонентов.

$Domain = 'tech.io'

## Распределите настройки для удобочитаемости
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Online'
}

## Добавьте новую папку, расположенную на сервере 'FileServer01', и установите Online
New-DfsnFolderTarget @NewTPS

На данный момент у нас добавлены два из трех путей сервера, и они онлайн. Для нашего последнего пути папки мы хотим добавить путь, но не делать его доступным для пользователей. Так что добавим путь к целевой папке в наш PowerShell DFS папку и на этот раз установим состояние пути DFS папки в режим offline, мы снова используем New-DfsnFolderTarget.

$Domain = 'tech.io'
## Распределите настройки для удобочитаемости
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Offline'
}

## Добавьте новую папку, расположенную на сервере 'FileServer02', и установите в режим Offline
New-DfsnFolderTarget @NewTPS
## Проверьте, что папка теперь существует:
Creating a new DFS folder target

Вы можете видеть, что FileServer01 и путь дата-центра в данный момент Online, а состояние FileServer02 было установлено в Offline.

DFS path status

Установка целей папок DFS в режим Offline или Online

Мы также можем изменить, какие серверы являются хостами в режиме Online и Offline, и даже определить, какой сервер будет основным хостом для пути к файлу, используя Set-DfsnFolderTarget.

$Domain = 'tech.io'

## Распределение настроек, где путь указывает на сервер с именем FileServer01
$ChangeTPsFS1 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Offline'
}

## Установка папки, расположенной по пути сервера 'FileServer01', в состояние Offline
Set-DfsnFolderTarget @ChangeTPsFS1

## Распределение настроек, где путь указывает на сервер с именем FileServer02
$ChangeTPsFS2 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Online'
    ReferralPriorityClass = 'globalhigh'
}

## Установка папки, расположенной на сервере 'FileServer02', в состояние Online
Set-DfsnFolderTarget @ChangeTPsFS2

## Распределение настроек, где путь указывает на сервер с именем Datacenter
$ChangeTPsFS3 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\datacenter\FileShare\PowerShell'
    ReferralPriorityClass = 'sitecostnormal'
}

## Изменение приоритета пути к папке сервера 'Datacenter' на 'Normal'
Set-DfsnFolderTarget @ChangeTPsFS3

Как видно ниже:

  • Путь FileServer01 изменился на Offline
  • Datacenter сервера ReferralPriorityClass переключился на sitecost-normal с global-high
  • Путь FileServer02 изменил свое состояние на Online
  • 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' на Offline и удаление пути к папке
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
Remove-DfsnFolderTarget @DelFTS -Force:$true

Мы попрощались с папкой FileServer02.

FileServer02 fodder is removed

Удаление папок DFS

Это был долгий и извилистый путь, но пришло время завершить нашу DFS-ссылку. Мы можем удалить папку PowerShell и DFS-ссылку с помощью командлета 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/