Test-ADReplication

Die Überwachung von Systemen ist einfach notwendig und nicht immer reicht eine passive Auswertung von Performance Countern oder Eventlogs aus. Manche Dinge bedürfen einer aktiven Überwachung (Siehe auch Ende2Ende Monitoring). Das Active Directory als Infrastruktur ist so eine Komponente bei der ich schon lieber schnell wüsste, wenn eine Replikation "zu lange" dauert oder gar nicht innerhalb festgelegter Zeiten stattfindet. Große Überwachungslösungen wie SystemCenter bringen solche Funktionen mit. Kleine Lösungen können zumindest Skripte einbinden.

Funktionsweise

Das folgende PowerShell-Skript übernimmt für mich diese Aufgabe, indem es in die Beschreibung der Domain, (Ein Feld was in den wenigsten Fällen genutzt wird) einen Zeitstempel schreibt. Beim nächsten Aufruf liest es den Stempel um die Pausenzeit zu erhalten. Zusammen mit einer maximalen tolerierbaren Latenzzeit (120 Sekunden Default) werden dann die anderen DCs befragt und der mittlerweile dort angekommene Zeitstempelt ausgelesen.

Wird das Skript zu kurz hintereinander aufgerufen, dann wird eine Warnung generiert. Auch wenn der letzte Lauf länger als eine angegebene Schnelle hier ist, wird eine Warnung ausgegeben. Ansonsten prüft das Skript das Alter der anderen Zeitstempel und warnt, wenn diese älter als die maximale Latenzzeit sind.

Download und Konfiguration

Das PowerShell-Skript muss vor dem Aufruf natürlich parametrisiert werden. Dank PowerShell 2 ist das über den "PARAM"-Block sehr einfach möglich, so dass Sie die Werte entweder direkt im Skript anpassen oder per Kommandozeile übergeben können:

param (
	$testobjectdn = "dc=netatwork,dc=de",    # dn to the testobject. Object must exist
	$testproperty = "description",           # object property to write to. must be string
	$sourceserver = "nawdc003",              # DC to write to
	$targetserver = ("nawdc001","nawdc002"), # DCs to read
	$lastrunwarning = 600,                   # generate warning if sourcetimestamp older than 
	$maxlatency = 120                        # minimum time to wait für start checking
	)

Hier der Link zum Download

testadreplication1.0.ps1.txt

Speichern Sie das Skript als Datei und ändern Sie dann die Erweiterung auf ".ps1". ändern Sie entsprechend die Parameter im Skript oder erstellen Sie einen Aufruf, der die Default-Werte überschreibt. Wenn Sie nicht die Beschreibung ("description") der Domain verwenden, sondern ein anderes Objekt in einer OU, kann müssen Sie das Skript nicht mit privilegierten Rechten aufrufen., Dann reicht sogar ein normales Benutzerkonto, welches aber einen Wert im gewählten Testobjekt mit einem Zeitstempel beschreiben können muss.

Weiterentwicklung

Das Skript ist erst mal ein Muster, was wie mit PowerShell einfach möglich ist. Sicher kann das Skript so auch in VBScript erstellt werden und in jede beliebige Managementlösung integriert werden. Dennoch ist es aktuell nur ein "Kommandozeilentool", welches seine Ausgaben nur farbig auf der Konsole ausgibt.

Eine Ausgabe als Eventlog, Versand einer Mail oder Rückgabe als Errorlevel ist aktuell nicht implementiert. Denkbar wäre natürlich auch, dass das Skript gar nicht den Timestamp selbst auswertet, sondern das "whenChanged"-Attribut

Auch fehlt aktuell jede Logik, wie lokale Verzögerungen und die Replikation über AD-Sites hinweg unterschieden werden können. Aktuell werden alle DCs gleich behandelt. Eine Anpassung ist aber einfach möglich.

Genau genommen müsste das Skript dann je Partition und je DC eigene Tests durchführen, damit wirklich jede Konstellation überprüft wird. Auch gibt es noch keine Abhandlung von "Downtimes" von DCs, also dass ein DC einfach nicht da ist.

Weitere Links