Назад | Перейти на главную страницу

Как проверить DFSR или FRS для репликации Sysvol с помощью Powershell?

Я исследовал, как проверить, используется ли DFSR или FRS для репликации Sysvol с PowerShell. Вот мои наивные методы, которые я попытался реализовать.

  1. Проверьте, установлена ​​ли репликация DFS

PS C:> Get-WindowsFeature | где Displayname -Match "Replication"

Display Name                                            Name                       Install State
------------                                            ----                       -------------
        [ ] DFS Replication                             FS-DFS-Replication             Available

Итак, это доказывает, что он использует FRS вместо DFSR ??

  1. Проверить 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.