Trickkiste

NT-Dienste auf entfernten Computern

Windows NT unterscheidet zwischen Anwendungen und Diensten. Letzteres sind Programme, die das System in der Startphase aufruft, auch ohne daß sich ein Benutzer angemeldet hat. Sie haben in der Regel keine Interaktion mit dem Desktop.

Für den Zweck, NT-Dienste auf entfernten Servern zu überwachen und zu steuern, hält das Windows NT Resource Kit das Programm Netsvc.exe bereit.

Die Syntax sieht folgendermaßen aus:

netsvc \\ [option]

Die verschiedenen Parameter für Netsvc haben folgende Bedeutung:

Dienstname bezeichnet den jeweils zu kontrollierenden Dienst. Der Name läßt sich hierbei entweder so angeben, wie er in der Registry des Servers definiert ist, oder in Form des Anzeigenamens, wie er in der Systemsteuerung unter Dienste erscheint. Wenn der Anzeigename Leerstellen enthält, muß er in Anführungszeichen "“" eingeschlossen werden.

\\Computername nennt den lokalen oder entfernten Rechner, auf dessen Dienste der Zugriff erfolgen soll.

Option kann die Werte /query, /start, /stop, /continue, /list oder /pause annehmen. Bei /list ist kein Dienstname erforderlich. Bei all diesen Optionen unterscheidet das System nach Groß- und Kleinschreibung. Anders als sonst bei NT üblich muß hier also peinlich genau auf die Schreibweise geachtet werden.

Unglücklicherweise liefert Netsvc keinen Errorlevel zurück, sondern gibt das Ergebnis der jeweiligen Aktion als Text auf dem Bildschirm aus. Das macht es schwierig, innerhalb von Batch-Dateien das Resultat zu testen, also festzustellen, ob der gewünschte Dienst gestartet oder gestoppt worden ist, oder ob er pausiert.

Folgende Batch-Datei überprüft den Status eines Dienstes und liefert eine Umgebungsvariable Errorlevel zurück:

et ERRORLEVEL=0

if “%1“==““ goto end

if “%2“==““ goto end

for /f “Tokens=1-4“ %%i in (‘netsvc %2 %1 /query’) do call

:test “%%k“

goto end

:test

if %1==“running“ set ERRORLEVEL=1&goto end

if %1==“stopped“ set ERRORLEVEL=2&goto end

if %1==“paused“ set ERRORLEVEL=3

:end

Die Syntax für den Aufruf von Svcstat.bat sieht dann so aus:

call svcstat \\

Der zurückgegebene Errorlevel ist wie folgt zu interpretieren:

l 0 = Computername oder Dienstname sind ungültig.

l 1 = Der Dienst ist gestartet.

l 2 = Der Dienst ist nicht gestartet.

l 3 = Der Dienst pausiert.

Folgender Beispielausschnitt aus einer Batch-Datei überprüft den Status des Zeitplandienstes auf dem lokalen Computer :

call SVCSTAT \\%Computername% Schedule

if %ERRORLEVEL% EQU 0 goto err

if %ERRORLEVEL% EQU 1 goto running

if %ERRORLEVEL% EQU 2 goto stopped

ELSE goto paused