Windows 2003 Shell Scripting

Shell Scripting im Netzwerk

Funktion

Zu Beginn wird geprüft, ob überhaupt ein Domänenname angegeben wurde. Falls nicht, wird eine entsprechende Meldung ausgegeben und der Batch beendet.

Danach folgt der Kern des Shell Scripts. Über einen Aufruf von nslookup wird nach den DNS Service-Records für den Eintrag der Domain Controller gesucht. Dazu wird über die Option -type der Abfragetyp auf SRV-Einträge umgestellt und dann nach dem LDAP-Eintrag auf TCP-Basis für den Namen der Domäne gesucht. Falls der DNS-Server einen Eintrag findet, liefert nslookup die unten stehende Ausgabe (hier am Beispiel der Demo-Domain shellbook.local).

C:\tmp>nslookup -type=SRV _ldap._tcp.dc._
msdcs.shellbook.local
Server: localhost
Address: 127.0.0.1

_ldap._tcp.dc._msdcs.shellbook.local SRV service
location:
priority = 0
weight = 100
port = 389
svr hostname = silicony.shellbook.local
silicony.shellbook.local internet address = 192.168.229.11

C:\tmp>

Wir sind nur an der Zeile interessiert, die mit „scr hostname“ beginnt. Hier findet sich der DNS-Name des jeweiligen Domain Controllers. Um diese Information für die spätere Verarbeitung zu speichern, wird die Ausgabe in eine Datei umgeleitet. Dazu dient der Teil hinter nslookup.

2> nul | find "hostname" > %temp%\dclist.txt

Die Fehlerausgabe (falls kein DNS-Eintrag gefunden wird, geht das berüchtigte „non-existant domain“ statt nach StdErr ins Null-Device) wird ignoriert. Die Ausgabe für StdOut wird per Piping an find übergeben, das nach dem String hostname sucht. Sollten bei der Abfrage mehrere Domain Controller gefunden werden, enthält die Datei dclist.txt nach der Ausführung mehr als eine Zeile. Wir verwenden dann den letzten gefundenen Eintrag (mehr dazu weiter unten).

Jetzt wird der durch find erzeugte Errorlevel geprüft und bei einem Inhalt ungleich 0 eine Meldung ausgegeben, dass kein Domain Controller gefunden werden konnte.