Windows 2003 Shell Scripting

Shell Scripting im Netzwerk

Verarbeitung der Ergebnisdatei

Im Anschluss folgt die Verarbeitung der Ergebnisdatei. Um hier auch eine Prüfung auf leere Dateien und andere mögliche Probleme zu ermöglichen, wird nicht direkt mit dem Lesen der Datei begonnen, sondern über das Kommando call eine interne Sprungmarke aufgerufen, die als ersten Parameter den Namen der Ergebnisdatei erhält. Damit Sie nicht zurückblättern müssen, hier nochmals der Teil des Scripts, der die Verarbeitung der Ergebnisdatei übernimmt.

:: verarbeiten der liste der domain controller
:process
set DCNAME=
if not exist %1 (echo Datei %1 existiert nicht) & goto
:eof
if %~z1 == 0 (echo Datei %1 ist leer) & goto :eof
for /F "delims== tokens=2" %%f in (%1) do @set
DCNAME=%%f
set DCNAME=%DCNAME: =%
del %temp%\dclist.txt
goto :eof

Zuerst wird die Umgebungsvariable DCNAME geleert (falls Sie einen anderen Namen bevorzugen, verwenden Sie ihn einfach, dann aber überall im Batch). Jetzt wird sicherheitshalber geprüft, ob die angegebene Datei überhaupt existiert. Danach folgt ein Test, ob die Datei leer ist oder nicht, indem die Dateigröße auf 0 Byte getestet wird.

Nun wird in einer for-Schleife jede Zeile der Datei gelesen. Als Trennzeichen wird das Gleichheitszeichen definiert, und wir lesen das zweite Token (dies ist der Teil nach dem „=“ mit dem Hostnamen). Dieses Token wird per set in der Variablen DCNAME gespeichert. Diese Schleife ist auch der Grund, warum bei mehr als einem Domain Controller immer der letzte verwendet wird. Jeder Durchlauf überschreibt den vorherigen Inhalt der Umgebungsvariablen. Als kleine Übung können Sie das Shell Script so umbauen, dass nach der ersten erfolgreichen Zuweisung die Schleife die Variable nicht mehr belegt. Als Übung für Fortgeschrittene sollten Sie versuchen, die Schleife so zu ändern, dass bei mehr als einem Domain Controller alle Hostnamen durch Leerzeichen getrennt in der Variablen DCNAME enthalten sind.

Nach der for-Schleife werden noch alle eventuell vorhandenen Leerzeichen in der Variablen entfernt, sodass nur der Hostname übrig bleibt. Die nun nicht mehr benötigte Datei wird gelöscht, damit folgen das Beenden des Aufrufs und die Rückkehr zum Hauptbatch.

Wie Sie sehen, ist der Aufwand auch für Aufgabenstellungen, die normalerweise gleich an VBScript und LDAP denken lassen, mit der Shell nicht sehr groß und auch für Nichtprogrammierer lösbar. Gerade im Bereich Netzwerk bietet die Shell mittlerweile von dnscmd über nslookup und bis zu netsh alle Möglichkeiten, die ein Administrator benötigt.