Public/Discovery/Get-ADReplication.ps1
function Get-ADReplication { Param () <# .SYNOPSIS Get Active Directory Replication Summary from each Domain Controller in the Forest .EXAMPLE Get-ADReplicaton | Export-Csv .\ADReplication.csv -notypeinformation #> $domain = (Get-ADForest).Domains $server = ForEach ($curDomain in $domain) { Try { Get-ADDomainController -Discover -DomainName $curDomain -erroraction stop } Catch { Write-Warning "Error Discovering Server in Domain: $curDomain" } } $dc = ForEach ($curServer in $Server) { Try { Get-ADDomainController -Filter * -Server $curServer.name -erroraction stop } Catch { Write-Warning "Error Discovering DCs with Server: $curServer" } } foreach ($curDC in $dc) { $src = @(& C:\windows\system32\repadmin.exe /replsummary /bysrc /sort:delta $curDC.hostname) $cleanSrc = @() for ($i = 10; $i -lt ($src.Count - 4); $i++) { if ($src[$i] -ne "") { $src[$i] -replace '\s+', ' ' | Out-Null $cleanSrc += $src[$i] } } foreach ($line in $cleanSrc) { if ($line -like "* days*") { $line = ($line -replace ' days', 'days') } $splitSrc = $line -split '\s+', 8 if ($splitSrc[0] -eq "Source") { $repType = "Source" } if ($splitSrc[0] -eq "Destination") { $repType = "Destination" } if ($splitSrc[1] -notmatch "DSA") { New-Object PSCustomObject -Property @{ Testing = $curDC.hostname ADSite = $curDC.Site DSAType = $repType Hostname = $splitSrc[1] Delta = $splitSrc[2] Fails = $splitSrc[3] Total = $splitSrc[5] PctError = $splitSrc[6] ErrorMsg = $splitSrc[7] } | Select-Object Testing, ADSite, DSAType, Hostname, Delta, Fails, Total, PctError, ErrorMsg } } $dest = @(& C:\windows\system32\repadmin.exe /replsummary /bydst /sort:delta $curDC.hostname) $cleandest = @() for ($i = 10; $i -lt ($dest.Count - 4); $i++) { if ($dest[$i] -ne "") { $dest[$i] -replace '\s+', ' ' | Out-Null $cleandest += $dest[$i] } } foreach ($line in $cleandest) { if ($line -like "* days*") { $line = ($line -replace ' days', 'days') } $splitDest = $line -split '\s+', 8 if ($splitDest[0] -eq "Source") { $repType = "Source" } if ($splitDest[0] -eq "Destination") { $repType = "Destination" } if ($splitDest[1] -notmatch "DSA") { New-Object PSCustomObject -Property @{ Testing = $curDC.hostname ADSite = $curDC.Site DSAType = $repType Hostname = $splitDest[1] Delta = $splitDest[2] Fails = $splitDest[3] Total = $splitDest[5] PctError = $splitDest[6] ErrorMsg = $splitDest[7] } | Select-Object Testing, ADSite, DSAType, Hostname, Delta, Fails, Total, PctError, ErrorMsg } } } } |