# ad-replication.ps1 — domain controller replication summary via repadmin. # Run on a DC (or any host with RSAT-AD installed). $Url = "YOUR_URL/ad-repl" $Output = & repadmin /replsummary 2>&1 $ExitCode = $LASTEXITCODE if ($ExitCode -ne 0) { $Body = (@{ hostname = $env:COMPUTERNAME error = "repadmin exit $ExitCode" output_excerpt = ($Output | Select-Object -First 20) -join "`n" }) | ConvertTo-Json -Compress Invoke-RestMethod -Uri $Url -Method Post -Body $Body -ContentType "application/json" -TimeoutSec 15 | Out-Null exit 1 } $Failures = 0 $FailingLines = @() # repadmin /replsummary rows look like: # Source DSA largest delta fails/total %% error # DC01 00m:01s 0/ 6 0 foreach ($line in $Output) { if ($line -match '^\s*\S+\s+\S+\s+(\d+)\s*/\s*\d+\s+\S+') { $fails = [int]$matches[1] if ($fails -gt 0) { $Failures += $fails $FailingLines += $line.Trim() } } } $Body = (@{ hostname = $env:COMPUTERNAME total_failures = $Failures failing_summary = $FailingLines }) | ConvertTo-Json -Compress -Depth 4 Invoke-RestMethod -Uri $Url -Method Post -Body $Body ` -ContentType "application/json" -TimeoutSec 15 | Out-Null