Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Errorlevel von Windows-Diensten immer gleich?

UselessUser / 6 Antworten / Baumansicht Nickles

Hallo Leute,

ich möchte eine ganz simple Batch-Datei erstellen, die abfragt, ob ein bestimmter Dienst auf Windows XP/Server 2003 läuft.
Ich habe folgende Errorlevel im Internet gefunden:
0 = Computername oder Dienstname sind ungültig.
1 = Der Dienst ist gestartet.
2 = Der Dienst ist nicht gestartet.
3 = Der Dienst pausiert.

------------- Anfang ------------
@echo off
net start|find /i "spoolsv"
echo %errorlevel%
if %errorlevel% equ 1 (
echo "Dienst laeuft!"
)
if %errorlevel% equ 2 (
echo "Dienst laeuft nicht!"
)
pause
-------------- Ende --------------

Mein Problem: Es wird stets der Wert 1 ausgegeben, egal, ob der Dienst läuft oder nicht! Habe es schon mit verschiedenen Windows-Diensten auf 2 Rechnern versucht.

Wo steckt der Fehler?

Thx,

UselessUser

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
gelöscht_101060 UselessUser „Errorlevel von Windows-Diensten immer gleich?“
Optionen

Huhu,

habe dazu etwas m.M.n. Passendes gefunden - http://www.wer-weiss-was.de/theme157/article3890107.html

BG,

Bergi2002

bei Antwort benachrichtigen
UselessUser gelöscht_101060 „Huhu, habe dazu etwas m.M.n. Passendes gefunden -...“
Optionen

Hallo Bergi2002,

danke für die Mühe und den Link! Allerdings komme ich mit dieser Batch-Datei nicht zurecht:

-------- Anfang -----------
@echo off
set retval=0
if "%~1" EQU "" goto usage
set pn=%~1
if "%~2" EQU "" goto usage
set un=%~2
goto main

:checkproc
for /f "usebackq tokens=1" %%a in ( `tasklist /fi "imagename eq %pn%" /fi "username eq %un%" /nh` ) do if "%%a" EQU "%pn%" exit /b 0
exit /b 1

:main
call :checkproc
set retval=%errorlevel%
goto eof

:usage
echo Aufruf von %0 Prozessname Benutzername
set retval=1

:eof
if %retval% EQU 0 (
echo Prozess laueft!
) else (
echo Prozess laueft NICHT!
)
exit /b %retval%
----------- Ende ---------------

Was bedeutet
"%~1" ?
Wo setze ich hier den Prozess ein, den ich suche und brauche ich noch den Benutzernamen, unter dem der Prozess läuft? Wo muss ich was eintragen?

Das Script scheint auch mit der Taskliste zu arbeiten, bei der einige Dienste nur als "svchost" bezeichnet werden.

UU

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
peterson UselessUser „Errorlevel von Windows-Diensten immer gleich?“
Optionen

Wenn ich mal an die DOS-Zeiten zurückdenke, dann mußt Du die ErrorLevel-Meldungen umdrehen.

3
2
1
0

bei Antwort benachrichtigen
UselessUser peterson „Das ist eigentlich logisch.“
Optionen

Hallo peterson,

das Umdrehen der Abfrage nützt hier leider nichts, habe ich schon ausprobiert. Es hakt ja schon daran, dass immer der gleiche Wert zurückgegeben wird.

MfG

UU

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen
peterson UselessUser „Hallo peterson, das Umdrehen der Abfrage nützt hier leider nichts, habe ich...“
Optionen

Möglicherweise gibt es nicht bei allen Funktionen einen ErrorLevel.
Zumindest kommt man zu diesem Schluß, wenn man mal in ein altes DOS-Buch reinschaut.

bei Antwort benachrichtigen
UselessUser peterson „Möglicherweise gibt es nicht bei allen Funktionen einen ErrorLevel. Zumindest...“
Optionen

Hallo peterson,

habe jetzt gelesen, dass die Rückgabe von Errorlevel-Werten unzuverlässig ist. Hier muss man anscheinend auf andere Methoden ausweichen.

Übrigens: DOS gibt es afaik seit den Windows-Versionen ab 2000 Professionell nicht mehr, wenn auch viele Kommandozeilen-Befehle weiterhin für die gleichen Funktionen verwendet werden.

Thx, UU

Rückmeldungen über Hilfestellungen sind sehr erwünscht:1. investiere ich Zeit, um dir zu antworten und2. möchte ich auch etwas dazulernen.
bei Antwort benachrichtigen