Как проверить DFSR или FRS для репликации Sysvol с Powershell?
Я изучал, как проверить, используется ли DFSR или FRS для репликации Sysvol с powershell. Вот мои наивные методы, которые я пытался реализовать.
- Проверьте, установлена ли репликация DFS.
PS C:> Get-WindowsFeature|, где Displayname -Match "Репликация"
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, а также. Итак, в чем здесь проблема?
3 ответа
Я нашел способ, как реализовать это, надеюсь, это поможет!
$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.
Имейте в виду, что в Windows Server 2022 удален dfsrmig.exe, поэтому вы можете только проверить, работает ли служба FRS или DFS-R на всех контроллерах домена. Кроме того, начиная с Windows Server 2022 требуется наличие DFS-R, тогда как предыдущие ОС выдавали только предупреждение.
Теперь вы можете использовать
Get-DfsReplicationGroup -IncludeSysvol
чтобы проверить, есть ли в нем группа репликации «Том доменной системы».
(Get-ADDomainController -Filter *).name | ForEach-Object -Process {Get-Service -ComputerName $_ -Name DFSR,NTFRS} | Sort-Object DisplayName
для проверки услуг. FRS должен быть отключен, а DFSR должен работать.