PowerShellスクリプトで効率的なDFS管理

このチュートリアルで得た知識を使って、より良いDFS PowerShellスクリプトを書く方法を学ぶ準備をしましょう。この投稿では、PowerShellでDFSリンクを管理する方法をすべて学びます!

このブログ投稿には、TechSnipsの寄稿者であるScott Hurstが作成した補足ビデオがあります。ビデオを見るか、テキストをお好みの場合は読み続けてください!

最新のビデオ

分散ファイルシステム(DFS)リンクは、ネットワークファイル共有の作業の複雑さを軽減します。DFSリンクを使用すると、ユーザーとアプリケーションは共有フォルダに接続するための仮想パス名にアクセスできます。PowerShellを使用してDFSリンクを作成できます。

Active Directoryまたは他のDFS製品を管理している場合でも、DFS PowerShellスクリプトを書くことで、遭遇する問題を解決するのに役立ちます。

この仮想名前空間により、管理者は異なるサーバーにある共有フォルダを表示したり、共有フォルダの場所を変更したりすることができ、共有フォルダを使用するユーザーには完全に透明です。

ユーザーはブックマークを更新する必要がなくなり、ファイルサーバーが変更された場合でも、アプリケーションは新しいパスを更新する必要がありません。

DFSの利点

ユーザーにとって、ネットワーク共有フォルダへのアクセスは、リモートサーバーに保存されているフォルダに関連する複雑さの削減された<名前空間>\フォルダ名形式に単純化されます。

アプリケーションの場合、ネットワーク上のリソースへのハードコードされたパスを、ネットワークパスの変更により変更する必要はありません。DFS リンクを簡単に更新すれば、アプリケーションは新しい場所のリソースにアクセスし続けることができます。

DFSサーバーロールの前提条件

  • アクティブディレクトリ
  • Windowsサーバーにインストールされたファイルとストレージサービスの役割
  • Windowsサーバー(半期チャネル)
  • Windowsサーバー2016
  • Windowsサーバー2012 R2
  • Windowsサーバー2012
  • Windowsサーバー2008 R2データセンター/エンタープライズ

前提条件

  • 適切な権限を持つ管理者アカウント
  • ‘ファイルサービスツール – DFS管理ツール’がインストールされたRSATツール

DSC PowerShellスクリプトの設定

まず、RSATをダウンロードしてインストールします。次に、必要なすべてのWindows機能をインストールする必要があります。これにより、DFS管理 GUI、DFS リンクをPowerShellで作成し管理するためのWindows PowerShellのDFSネームスペースモジュール、コマンドラインツールがインストールされますが、サーバーにDFSサービスはインストールされません。

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

一般的なDFSコマンド

DFS管理 GUI、PowerShellのDFSネームスペース(DFSN) cmdlet、DfsUtilコマンド、またはWMIを呼び出すスクリプトを使用して、ネームスペースを管理できます。

一般的なPowerShellコマンドは次のとおりです:

  • Get-DfsnRoot – 現在のドメインで利用可能なDFS名前空間を検出します。 – 現在のドメインで利用可能な名前空間をチェックするためによく使用されます。
  • New-DfsnFolder – 新しいDFSフォルダ名を作成します。
    – 名前空間内で新しいDFSフォルダを作成するためによく使用されます。
  • New-DfsnFolderTarget – DFSフォルダ名にパスを割り当てます。
    – 1つ以上のネットワークフォルダパスをDFSフォルダに割り当てるためによく使用されます。
  • Remove-DfsnFolderTarget – DFSフォルダからパスを削除しますが、DFSフォルダ自体は削除しません。
    – 1つ以上のネットワークフォルダパスをDFSフォルダから削除するためによく使用されます。
  • Remove-DfsnFolder – フォルダとそのパスを削除します。
    – 名前空間からDFSフォルダを削除するためによく使用されます。

DFS名前空間の検索

Get-DfsnRootコマンドレットを使用して、現在のドメインでオンラインで利用可能な名前空間の一覧を取得します。

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

これにより、このドメインには2つの名前空間オンラインであることがわかります。

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名前空間にはPowerShellという名前のDFSフォルダが存在しないことがわかります。

Finding DFS folders

この例では、3つのファイルサーバー、FileServer01、FileServer02、およびDatacenterにPowerShellという名前の複製されたフォルダがあります。.

目標は、単一のパスを使用してこの複製されたフォルダを管理者と共有することです。

これを行うには、New-DfsnFolderを使用して、AppRoot名前空間のPowerShellという名前の新しいDFS リンクフォルダを作成し、データセンターサーバーのファイル共有にポイントします。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\'"

DFS Management GUIでは、PowerShell DFS フォルダが存在しないことがわかります。

Inspecting DFS folders in the GUI
The folder target UNC path

では、PowerShellコンソール内からWindows Explorerを実行し、存在しないことを確認しましょう。

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

フォルダが存在しない場合、ターミナルウィンドウに緑色のテキストで「Path not found. Clear to proceed」という出力が書き込まれます。

出力から、フォルダが作成され、Referral Priority ClassGlobal-Highに設定され、StateOnlineであることがわかります。

Inspecting DFS referral priority class and state

GUIもPowerShellの結果を確認しています。

Inspecting DFS referral priority class and state

そして、パスがWindows Explorerで利用可能になりました。

DFS path available in Windows Explorer

DFSフォルダのターゲットの作成

今、私たちはPowershell DFS フォルダ名前空間に作成しました。追加のフォルダターゲットパスを追加し、そのパスをオンラインに設定します。DFS PowerShellスクリプトでは、任意の数のコンポーネントを追加できます。

$Domain = 'tech.io'

## 設定を簡単に読みやすくするためにスプラットします
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Online'
}

## 'FileServer01'サーバーにある新しいフォルダを追加し、オンラインに設定
New-DfsnFolderTarget @NewTPS

この時点では、3つのサーバーパスのうち2つを追加してオンラインにしました。最後のフォルダパスには、パスを追加しますが、ユーザーには利用できないようにします。したがって、フォルダターゲットパスPowerShell DFS フォルダに追加し、この時点では DFSのパスの状態をオフラインに設定します。

$Domain = 'tech.io'
## 設定を簡単に読みやすくするためにスプラットします
$NewTPS = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Offline'
}

## 'FileServer02'サーバーにある新しいフォルダを追加し、オフラインに設定
New-DfsnFolderTarget @NewTPS
## フォルダが存在するか確認します:
Creating a new DFS folder target

FileServer01Datacenterのパスは現在オンラインであり、FileServer02の状態はオフラインに設定されています。

DFS path status

DFSフォルダターゲットをオフラインまたはオンラインに設定します

私たちは、オンラインおよびオフラインホストとしてどのサーバーを使用するか、さらにはファイルパスのプライマリホストとしてどのサーバーを使用するかを変更することもできます。これにはSet-DfsnFolderTargetを使用します。

$Domain = 'tech.io'

## パスが「FileServer01」という名前のサーバーを指している設定をスプラットしています
$ChangeTPsFS1 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer01\FileShare\PowerShell'
    State = 'Offline'
}

## サーバーパス「FileServer01」にあるフォルダをオフラインに設定します
Set-DfsnFolderTarget @ChangeTPsFS1

## パスが「FileServer02」という名前のサーバーを指している設定をスプラットしています
$ChangeTPsFS2 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\FileServer02\FileShare\PowerShell'
    State = 'Online'
    ReferralPriorityClass = 'globalhigh'
}

## 「FileServer02」という名前のサーバーにあるフォルダをオンラインに設定します
Set-DfsnFolderTarget @ChangeTPsFS2

## パスが「Datacenter」という名前のサーバーを指している設定をスプラットしています
$ChangeTPsFS3 = @{
    Path = "\$Domain\AppRoot\PowerShell"
    TargetPath = '\datacenter\FileShare\PowerShell'
    ReferralPriorityClass = 'sitecostnormal'
}

## 「Datacenter」という名前のサーバーのフォルダパスの優先度を「通常」に変更します
Set-DfsnFolderTarget @ChangeTPsFS3

以下に示すように、

  • FileServer01のパスがオフラインに変更されました。
  • DatacenterサーバーのReferralPriorityClassは、sitecost-normalからglobal-highに切り替わりました。
  • FileServer02のパスの状態がオンラインに変更されました。
  • FileServer02のReferralPriorityClassglobal-highに切り替わりました。
New status of DFS

PowerShellを使用してDFSフォルダターゲットパスを削除する

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 フォルダターゲットを削除する
Remove-DfsnFolderTarget @DelFTS -Force:$true

私たちは FileServer02 フォルダにさよならを言いました。

FileServer02 fodder is removed

DFS フォルダの削除

長く曲がりくねった道のりでしたが、DFS リンクの時が終わりました。 Remove-DfsnFolder コマンドレットを使用して、PowerShell フォルダと DFS リンクを削除できます。

$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/