Windows 2003 Shell Scripting

Shell Scripting im Netzwerk

Funktion

Mithilfe einer for-Schleife wird die Ausgabe von ipconfig /all Zeile für Zeile bearbeitet. Jetzt müssen wir feststellen, wo die Ausgabe eines Adapters beginnt. Dies ist mit der Ausgabe eines eventuell definierten verbindungsspezifischen DNS-Suffix der Fall. Für ein deutsches Windows finden Sie den Suchbegriff im fett gedruckten Wort im Listing. Für den Einsatz mit einem englischen Windows müssen Sie dieses Wort durch die entsprechende englische Ausgabe (connection-specific DNS suffix) ersetzen. Der ganze Trick besteht nun darin, sich irgendwie zu merken, dass nach der Zeile mit dem Suffix zuerst eine Zeile mit der Beschreibung des Adapters folgt. Die Zeile nach der Beschreibung ist dann die Zeile mit der Mac-Adresse.

Diese ganze Unterscheidung erfolgt im ersten Block nach der for-Schleife, den wir hier nochmals zum leichteren Nachvollziehen aufführen:

:procline
if "%action%" == "getDesc" goto getDesc
if "%action%" == "getMac" goto getMac
echo %1 | find /i "Verbindungsspez" > nul
if errorlevel 1 goto :eof
set action=getDesc
goto :eof

Zuerst wird mithilfe der Variablen action getestet, ob wir bereits auf eine Beschreibung oder auf eine Mac-Adresse warten. Dann erfolgt ein Sprung an die entsprechenden Sprungmarken. Ist dies noch nicht der Fall, wird mittels von find getestet, ob in der übergebenen Zeile der Text für das verbindungsspezifische Suffix vorkommt. Falls nicht, können wir uns weitere Aktionen schenken und beenden den Aufruf. Liefert find dagegen einen Exit-Code von 0, wird die Zeile ausgeführt, die den Inhalt von action auf den Wert „getDesc“ setzt. Beim nächsten Durchlauf wissen wir also, dass es sich um eine Beschreibungszeile handeln muss.

Die beiden Codeblöcke nach :getDesc und :getMac sind sehr ähnlich. Die übergebene Zeile wird mit einer for-Schleife am Doppelpunkt aufgetrennt und das zweite Wort verwendet. In der Variablen output wird der String aus Mac-Adresse und Beschreibung des Adapters zusammengestellt. Nach der Ausgabe beim Block von :getMac wird die Variable action wieder gelöscht, sodass der Zyklus von Neuem beginnen kann.