Я исследовал, как проверить, используется ли DFSR или FRS для репликации Sysvol с PowerShell. Вот мои наивные методы, которые я попытался реализовать.
PS C:> Get-WindowsFeature | где Displayname -Match "Replication"
Display Name Name Install State
------------ ---- -------------
[ ] DFS Replication FS-DFS-Replication Available
Итак, это доказывает, что он использует FRS вместо DFSR ??
Проверить 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}
}
}
Если вы хотите проверить репликацию DFS с помощью PowerShell, вы можете использовать соответствующие командлеты:
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.