しばたテックブログ

PowerShellを中心に気分で書いている技術ブログです。

PowerShellでDFSの環境を構築する

以前teratailのこちらの質問に回答した際に簡単な検証環境を作ったのですが、その手順を備忘録を兼ねてエントリとして公開します。

teratail.com

DFSの基本

本エントリではDFSの基本的なことについては触れません。
以下の記事が参考になりますのでご覧ください。

ascii.jp

www.atmarkit.co.jp

検証環境

名前空間サーバ(兼 ドメインコントローラー)1台、ターゲットサーバー1台のシンプルな環境を作ります。
OSはともにWindows Server 2012 R2、最新のWindows Updateと最低限のネットワーク設定が済んでいるところからスタートします。

設定項目 名前空間サーバ ターゲットサーバー
OS Windows Server 2012 R2 Windows Server 2012 R2
コンピューター名 ADSV FLSV
ドメイン corp.contoso.com corp.contoso.com
利用ユーザー administrator administrator

DFSの環境を構築する

1. ドメイン構築

名前空間サーバーで以下のコマンドを実行し、ドメイン corp.contoso.com を作成します。

# マシン名変更
Rename-Computer ADSV -Restart

# (再起動後)ドメイン作成
Add-WindowsFeature AD-Domain-Services, GPMC, RSAT-ADDS, RSAT-AD-PowerShell
Import-Module ADDSDeployment
$Params = @{
    DomainName        = "corp.contoso.com";
    DomainNetbiosName = "CONTOSO";
    ForestMode        = "Win2012R2";
    DomainMode        = "Win2012R2";
    DatabasePath      = "C:\Windows\NTDS";
    LogPath           = "C:\Windows\NTDS";
    SysvolPath        = "C:\Windows\SYSVOL";
    SafeModeAdministratorPassword = (Get-Credential);  # 接続情報
    InstallDns           = $true;
    CreateDnsDelegation  = $false;
    NoRebootOnCompletion = $false;
    Confirm = $false;
}
Install-ADDSForest @Params

2. ターゲットサーバーのドメイン参加

ターゲットサーバーをcorp.contoso.comドメインに参加させます。

# マシン名変更
Rename-Computer FLSV -Restart

# (再起動後)ドメイン参加
Add-Computer -DomainName corp.contoso.com -Restart

3. DFSの設定

名前空間サーバで以下のコマンドを実行してDFSの設定を行います。
最初にDFSの構成に必要な機能をインストールします。

# 機能のインストール
Install-WindowsFeature FS-DFS-Namespace, FS-DFS-Replication, RSAT-DFS-Mgmt-Con

続けてDFSルートを作ります。
名前空間サーバー上にある共有フォルダに対してNew-DfsnRootコマンドを実行してやります。

以下の例では最初にC:\DFSRoots\Publicに共有フォルダPublicを作成し、DFSルート\\corp.contoso.com\Publicを割り当てています。

# DFS設定(名前空間の作成)
$DFSRootPath = '\\corp.contoso.com\Public'
$DFSRootTarget = 'C:\DFSRoots\Public'
$DFSRootSharedPath = "\\$(hostname)\Public"
# 先に共有フォルダを作る
mkdir $DFSRootTarget
New-SmbShare –Name 'Public' –Path $DFSRootTarget -FullAccess everyone
# DFSルート作成
New-DfsnRoot -Path $DFSRootPath -Type DomainV2 -TargetPath $DFSRootSharedPath

DFSルートを作成した次はフォルダターゲットを作成します。
フォルダターゲットにはターゲットサーバー上の共有フォルダが必要なのでInvoke-Commandを使ってリモートから共有フォルダを作成してやります。

以下の例ではターゲットサーバーのC:\DFSTargets\Shareに共有フォルダShareを作成します。
接続情報は適宜設定してください。

# DFSターゲットの設定(共有フォルダの作成)
$DFSTargetHost = 'FLSV'
$DFSTargetCredential = Get-Credential # 接続情報
Invoke-Command -ComputerName $DFSTargetHost -Credential $DFSTargetCredential -ScriptBlock {
    $targetLocalPath = 'C:\DFSTargets\Share'
    mkdir $targetLocalPath
    New-SmbShare –Name 'Share' –Path $targetLocalPath -FullAccess everyone
}

最後にNew-DfsnFolderを使ってこの共有フォルダをDFSフォルダにします。

# フォルダターゲットの作成
$DFSFolderPath = '\\corp.contoso.com\Public\Share'
$DFSFolderTargetPath = "\\$($DFSTargetHost)\Share"
New-DfsnFolder -Path $DFSFolderPath -TargetPath $DFSFolderTargetPath

結果確認

ここまでの結果「DFSの管理」からは以下の様に見え、DFSの構成が上手くいったことが確認できます。

f:id:stknohg:20180717235804p:plain

f:id:stknohg:20180717235814p:plain

f:id:stknohg:20180717235831p:plain

f:id:stknohg:20180717235842p:plain

フォルダへのアクセスも良い感じにできています。

f:id:stknohg:20180717235923p:plain

【補足】DFSDsc

今回は触れませんでしたが、DFSを構築するためのDSC Resourceも当然存在しています。

github.com

このサンプルコードが今回の構成に近いので参考にしてみてください。