Teil 1: Allgemeine Problemstellungen

Shell Scripting unter Windows

Zweiter Teil des Scripts

Hier kommt der zweite Teil des Scripts. Jetzt folgt der eigentlich Check für den Zustand des Dienstes. Wir wollen aber erreichen, dass inaktive Server ebenfalls mit einer entsprechenden Meldung angezeigt werden. Daher wird zuerst ein Ping auf der Maschine ausgeführt, um zu prüfen, ob der Server erreichbar und online ist. Falls find eine Zeile mit dem String „TTL“ (steht als Time To Live in einer erfolgreichen Ping-Antwort) gefunden hat, erhalten wir einen Errorlevel von 0, bei negativem Suchergebnis einen Wert von 1 (und damit ist der Rechner nicht per Ping erreichbar). In diesem Fall setzen wir die Variable line auf die auszugebende Statusmeldung (hier UNREACHABLE).

:check
ping -n 1 %1 | find "TTL" > nul
if errorlevel 1 set line=UNREACHABLE
if errorlevel 0 for /F "tokens=4" %%a in ('sc \\%1 query
messenger ^| find "STATE"') do set line=%%a
:: padding des servernamens
set server=%1
set count=0
set c=%server%
:loop
set c=%c:~0,-1%
if not x%c% == x set /A count=%count%+1 & goto loop
:padloop
:: Achtung!! Die nächste Zeile ist nur fuer den Druck umbrochen!
:: das "& goto padloop" gehoert in die gleiche Zeile
if %count% LEQ 16 (set server=%server%.) & (set /A count=%count%+1)
& goto padloop
echo %server% %line%

Bei einem erfolgreichen Ping wird mit sc der Zustand des Dienstes (hier der messenger, Sie sollten dies für Ihre Zwecke anpassen) abgefragt und die gefilterte Ausgabe per Backquoting in die Variable line gespeichert. Ab dem Kommentar :: padding des servernamens beginnt der Code für die „schöne“ Ausgabe des Servernamens. Wir zählen die Länge des aktuellen Servernamens und fügen dann so oft das Zeichen „.“ an den Servernamen an, wie dieser kleiner oder gleich 16 Zeichen ist.

Nun werden nur noch per Echo der ausgerichtete Servername und der Status des Dienstes ausgegeben. Hier eine Beispielausgabe:

C:\tmp>getServiceState.bat
silicony.......... STOPPED
bytebag........... UNREACHABLE
192.168.229.11.... STOPPED

Auch die Stringverarbeitung per Shell ist möglich, wenn der Code auch nicht sehr elegant aussieht. Grundsätzlich Das Ausrichten könnte man in eigenes Shell Script auslagern, dem die Daten als Parameter übergeben werden und das ein Ergebnis per Umgebungsvariable zurückliefert (etwa strPad server left 16).