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.