You are on page 1of 2

<#

.SYNOPSIS
Check AD Replication in a DC Server.
.DESCRIPTION
Check AD Replication in a DC Server and returns Nagios output and code.
.PARAMETER Warning
Number of failed replications for warning treshold.
Default 1.
.PARAMETER Critical
Number of failed replications for critical treshold.
Default 5.
.OUTPUTS
OK: AD replication successful.
WARNING: Failed replications equal to Warning treshold.
CRITICAL: Failed replications equal to Critical treshold.
.EXAMPLE
.\Get-ADReplication.ps1 -Warning 5 -Critical 10
.NOTES
Author: Juan Granados
Date: December 2017
#>
Param(
[Parameter(Mandatory=$false,Position=0)]
[ValidateNotNullOrEmpty()]
[int]$Warning=1,
[Parameter(Mandatory=$false,Position=1)]
[ValidateNotNullOrEmpty()]
[int]$Critical=5
)
# Variables
$SyncErrors=0
$LASTEXITCODE = 0
$NagiosOutput = ""
$Syncs = 0

# Get AD Replication Status for this DC


$SyncResults = Get-WmiObject -Namespace root\MicrosoftActiveDirectory -Class
MSAD_ReplNeighbor -ComputerName $env:COMPUTERNAME |
select SourceDsaCN, NamingContextDN, LastSyncResult,
NumConsecutiveSyncFailures, @{N="LastSyncAttempt";
E={$_.ConvertToDateTime($_.TimeOfLastSyncAttempt)}}, @{N="LastSyncSuccess";
E={$_.ConvertToDateTime($_.TimeOfLastSyncSuccess)}}

# Process result
foreach ($SyncResult in $SyncResults)
{
if ($SyncResult.LastSyncResult -gt 0){
$NagiosOutput += "$($SyncResult.NumConsecutiveSyncFailures) failed sync
with DC $($SyncResult.SourceDsaCN) on $($SyncResult.NamingContextDN) at $
($SyncResult.LastSyncAttempt), last success sync at $
($SyncResult.LastSyncSuccess)."
$SyncErrors++
if ($SyncErrors -eq $Warning){
$LASTEXITCODE = 1
}
elseif ($SyncErrors -eq $Critical) {
$LASTEXITCODE = 2
}
}
else{
$Syncs++
}
}
# Nagios Output
$NagiosOutput += " | Syncs=$($Syncs);;;; SyncErrors=$($SyncErrors);$Warning;
$Critical;;"
if ($LASTEXITCODE -eq "2") {
Write-Host "CRITICAL: Replication error: $($NagiosOutput)"
#$host.SetShouldExit(2)

}
elseif ($LASTEXITCODE -eq "1") {
Write-Host "WARNING: Replication error: $($NagiosOutput)"
#$host.SetShouldExit(1)

}
elseif ($LASTEXITCODE -eq "0") {

Write-Host "OK: replication is up and running.$($NagiosOutput)"


#$host.SetShouldExit(0)

exit $LASTEXITCODE

You might also like