Zum Inhalt springen

Active Directory Replikation mit PowerShell-Script überwachen

Symbolbild Binär

Domaincontroller führen über die Active Directory Replikation einen Abgleich der Verzeichnisdaten durch. Wenn dieser Abgleich aus irgendwelchen Gründen ausfällt, fällt es üblicherweise erst auf, wenn neue Objekte oder Änderungen auf einem Domaincontroller fehlen.

Das folgende PowerShell-Script überwacht die Replikation und sendet bei einem einstündigen Ausfall (siehe $maxDifference) eine E-Mail an die angegebene Adresse. Um eine regelmäßige Überwachung sicherzustellen, sollte das Script regelmäßig (z.B. einmal täglich) über die Windows Aufgabenplanung auf einem Domaincontroller oder einem System mit Active-Directory-PowerShell-Cmdlets und entsprechenden Rechten ausgeführt werden.

######################  Optionen ######################
$mailTo = "to@domain.at";
$mailFrom = "from@domain.at";
$mailSubject = "AD-Replikation prüfen";
$mailSMTP = "smtp.domain.at";
$maxDifference = -1; # hours
#######################################################

$timeLimit = (Get-Date).AddHours($maxDifference)
$adServers = (Get-ADForest).globalcatalogs | sort
$err = $false
$body = ""

foreach($adServer in $adServers){

    # Server online?
    if(Test-Connection $adServer -Count 2 -Quiet){

        # AD-Replikationsfehler abfragen
        try {
            $checkADRep = Get-ADReplicationFailure -Target $adServer -ErrorAction SilentlyContinue
        } catch {
            $body += $adServer + " FEHLER: Anzahl der Replikationsfehler nicht ermittelt!<br>"
            $err = $true
        }

        # AD-Replikationsfehler gefunden?
        if($checkADRep.Failurecount -gt 0){
            # Anzahl ausgeben
            $body += $adServer + " FEHLER: FailureCount/s je Partner " + $checkADRep.Failurecount + "<br>"
            $err = $true
        }

        # AD-Replikationspartner und Status
        try {
            $checkADRepPartner = ""
            $checkADRepPartner = Get-ADReplicationPartnerMetadata -Target $adServer -ErrorAction SilentlyContinue
        } catch {
            $body += $adServer + " FEHLER: Replikationspartner-Daten konnten nicht geprüft werden!<br>"
            $err = $true
        }
        foreach($check in $checkADRepPartner){          
            if($check.LastReplicationSuccess -lt $timeLimit -and $check.LastReplicationSuccess -notlike ''){
                $body += $adServer + " FEHLER: Letzte erfolgreiche Replikation " + $check.LastReplicationSuccess + " mit Partner " + $check.partner + "<br>"
                $err = $true
            } elseif($check.LastReplicationSuccess -like ''){
                $body += $adServer + " FEHLER: AD-Replikationspartner-Daten nicht lesbar<br>"
                $err = $true
            }
        }

    } else {
        # Server offline
        $body += $adServer + " WARNUNG: Server nicht erreichbar<br>"
        $err = $true
    }

}


if($err -eq $true){
    Send-MailMessage -To $mailTo -From $mailFrom -Subject $mailSubject -SmtpServer $mailSMTP -Body $body -BodyAsHtml -encoding ([System.Text.Encoding]::UTF8)
}Code-Sprache: PHP (php)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

vier × 1 =