Sysvol ReplicationのDFSRまたはFRSがpowershellで使用されているかどうかを確認する方法を調査しています。これが私の素朴な方法です、私は実装しようとしました。
PS C:> Get-WindowsFeature | where Displayname -Match "Replication"
Display Name Name Install State
------------ ---- -------------
[ ] DFS Replication FS-DFS-Replication Available
それで、これはDFSRよりもFRSを使用していることを証明していますか?
DNを確認する
$FRSsysvol = "CN=Domain System Volume (SYSVOL share),CN=File Replication Service,CN=System,"+(Get-ADDomain $domain).DistinguishedName
$DFSRsysvol = "CN=Domain System Volume,CN=DFSR-GlobalSettings,CN=System,"+(Get-ADDomain $domain).DistinguishedName
$frs = Get-ADObject -Filter { distinguishedName -eq $FRSsysvol }
$dfsr = Get-ADObject -Filter { distinguishedName -eq $DFSRsysvol }
if ( $frs -ne $null ) { Write-Host -ForegroundColor red "FRS" }
elseif ( $dfsr -ne $null ) { Write-Host -ForegroundColor green "DFS-R" }
else { Write-Host -ForegroundColor Red "unknown" }
これは「FRS」を返します。しかし、$frs
と$dfsr
の出力を再確認すると、どちらも$null
ではありません。どちらもDN、Name、ObjectClass、ObjectGUIDを返します。それで、ここで何が問題なのですか?
私はこれを実装する方法を見つけました、この助けを願っています!
$currentDomain =(Get-ADDomainController).hostname
$defaultNamingContext = (([ADSI]"LDAP://$currentDomain/rootDSE").defaultNamingContext)
$searcher = New-Object DirectoryServices.DirectorySearcher
$searcher.Filter = "(&(objectClass=computer)(dNSHostName=$currentDomain))"
$searcher.SearchRoot = "LDAP://" + $currentDomain + "/OU=Domain Controllers," + $defaultNamingContext
$dcObjectPath = $searcher.FindAll() | %{$_.Path}
# DFSR
$searchDFSR = New-Object DirectoryServices.DirectorySearcher
$searchDFSR.Filter = "(&(objectClass=msDFSR-Subscription)(name=SYSVOL Subscription))"
$searchDFSR.SearchRoot = $dcObjectPath
$dfsrSubObject = $searchDFSR.FindAll()
if ($dfsrSubObject -ne $null){
[pscustomobject]@{
"SYSVOL Replication Mechanism"= "DFSR"
"Path:"= $dfsrSubObject|%{$_.Properties."msdfsr-rootpath"}
}
}
# FRS
$searchFRS = New-Object DirectoryServices.DirectorySearcher
$searchFRS.Filter = "(&(objectClass=nTFRSSubscriber)(name=Domain System Volume (SYSVOL share)))"
$searchFRS.SearchRoot = $dcObjectPath
$frsSubObject = $searchFRS.FindAll()
if($frsSubObject -ne $null){
[pscustomobject]@{
"SYSVOL Replication Mechanism" = "FRS"
"Path" = $frsSubObject|%{$_.Properties.frsrootpath}
}
}
PowershellでDFSレプリケーションを確認する場合は、適切なコマンドレットを使用できます。
PS C:\> get-command -Name "*dfsr*"
CommandType Name ModuleName
----------- ---- ----------
Cmdlet Add-DfsrConnection DFSR
Cmdlet Add-DfsrMember DFSR
Cmdlet ConvertFrom-DfsrGuid DFSR
Cmdlet Export-DfsrClone DFSR
Cmdlet Get-DfsrBacklog DFSR
Cmdlet Get-DfsrCloneState DFSR
Cmdlet Get-DfsrConnection DFSR
Cmdlet Get-DfsrConnectionSchedule DFSR
Cmdlet Get-DfsReplicatedFolder DFSR
Cmdlet Get-DfsReplicationGroup DFSR
Cmdlet Get-DfsrFileHash DFSR
Cmdlet Get-DfsrGroupSchedule DFSR
Cmdlet Get-DfsrIdRecord DFSR
Cmdlet Get-DfsrMember DFSR
Cmdlet Get-DfsrMembership DFSR
Cmdlet Get-DfsrPreservedFiles DFSR
Cmdlet Get-DfsrServiceConfiguration DFSR
特に、Get-DfsrBacklog
は、レプリケーションを待機しているファイルがあるかどうかを確認します。
PS C:\Windows\system32> (Get-DfsrBacklog -SourceComputerName Server1 -DestinationComputerName Server2).count
4
待機中のファイルの数、より一般的にはどのファイルを提供します...ソースと宛先を反転して、反対側のレプリケーション状態を取得できます。
コメントを編集
dfsrmig.exe /GetGlobalState
を使用して、使用されているレプリケーションをテストできます。コマンドが 'dfsr not initalized'を返す場合、あなたはFSRを使用です。