DNSAge

VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur instanzieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird, welcher unter C:\Windows\SysWOW64\cscript.exe liegt.

Auf der Seite DNS finden Sie eine recht umfangreiche Beschreibung zur Funktion und Konfiguration von Windows DNS-Servern im Active Directory. Sie sollten auf dieser Seite zumindest das Kapitel DNS_Alterung lesen, welches die Grundlagen für diese Seite bildet.

Systeme können sich per "dynamischem DNS" auch im Active Directory selbst ein und austragen. Dies ist eine sehr bequeme Möglichkeit, wie Clients und Server immer die aktuellen Daten bereit stellen können, ohne dass Sie als Administrator aktiv werden müssen. Über "Sichere Updates" kann sogar ein System nur seine eigenen Einträge verändern und nur dem Active Directory bekannte Systeme (Computerkonto) kann Einträge addieren.

Aber auch wenn sich Systeme beim Herunterfahren wieder austragen, bleiben oftmals ein paar Altsysteme registriert, die es schon lange nicht mehr gibt. Manchmal blockieren Sie sogar DNS-Einträge (z.B.: PTR-Records). Daher kennen Windows DNS-Server eine Aufräumfunktion, die alte Einträge nach einiger Zeit löscht. Diese ist aber per Default nicht aktiv.

Und hier kommt DNSAge zum Einsatz. DNSAge löst folgende Probleme:

Das Skript ist in der vorliegenden Version komplett funktionsfähig. Interessant wären natürlich noch einige weitere Funktion z.B. eine Gegenprüfung zu einem Computerkonto im Active Directory Forest. So könnten dynamische Einträge sofort entfernt werden, wenn das Computerkonto nicht mehr existiert. Umgekehrt könnte ein Eintrag, der lange nicht mehr im DNS aktualisiert wurde, auch ein Löschen des Computerkontos anstoßen.

Technische Hintergründe

Ich habe einige Zeit gesucht, und zuerst per LDAP versucht, das Alter von DNS-Einträgen in Erfahrung zu bringen. Wie Sie vielleicht wissen, sind die DNS-Einträge bei einer Active Directory integrierten Zone (Meine Empfehlung beim Einsatz von DNS unter Windows), Bestandteil des Active Directory und per LDAP erreichbar. In einer eigenen Partition finden Sich die Einträge

DNS im Active Directory

Ein Export der Active Directory integrierten Zonen per LDAP ist nicht hilfreich, da die wichtige Daten im Feld "dnsRecord" codiert enthalten sind. Um nicht allzu viel Zeit mit der Decodierung von binären Daten zu verlieren, habe ich weiter gesucht und bin bei WMI fündig geworden. Die komplette DNS-Konfiguration und auch auf die Einträge sind per WMI erreichbar.

DNS per Powershell ausgeben

Um sie etwas neugierig auf "Powershell" zu machen, habe ich hier ein paar Musterzeilen beschrieben, mit denen Sie zumindest die Export-Funktion direkt auf der Powershelll Kommandezeile ausführen können:

REM Auslesen der zonen auf dem Server SRV01

Get-WmiObject -ComputerName SRV01 -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_Zone | Select Name

REM Ausgabe der MSXFAQ.DE Zone

Get-WmiObject -ComputerName SRV01 -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_Zone -Filter 'Name = "msxfaq.de"'

Wenn man nun weiß, dass Powershell extrem objektorientiert arbeiten, dann kann man hier natürlich noch weiter ansetzen und Einträge und ganze Zonen löschen und ergänzen.

VBScript-Lösung

Da nun die meisten Administratoren mit Powershell noch nicht viel gemacht haben und selbst das Schreiben eines VBScript bei dem ein oder anderen schon Schweißausbrüche verursacht, habe ich ihnen ein DNSAGE.VBS hier zum Download bereit gestellt.

dnsage.1.4.vbs
Datei speichern und Erweiterung nach VBS umbenennen.

Per Default liest das Skript alle Einträge des lokalen Servers und gibt diese auf dem Bildschirm aus. Daher sollte der Aufruf mit CSCRIPT in einer DOS-Box erfolgen. Wer die Ausgabe als Datei haben will, sollte die Ausgabe einfach umleiten und z.B. mit Excel als CSV-Datei öffnen.

cscript dnsage.vbs

cscript dnsage.vbs > dnsliste.csv

Das Skript erfragt drei Parameter, die mit ungefährlichen Standardwerten vorbelegt sind.

Um das Risiko einer irrtümlichen Löschung auszuschließen, habe ich den Löschbefehl selbst im Skript noch auskommentiert. Damit etwas gelöscht wird, müssen Sie den Code auf Zeit 48 wieder aktivieren.

Wer mag, kann die Abfragen im Skript natürlich durch feste Zuweisungen ersetzen.

Weitere Links

Keywords: DNS DynDNS VBScript