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
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Huhu,
habe dazu etwas m.M.n. Passendes gefunden - http://www.wer-weiss-was.de/theme157/article3890107.html
BG,
Bergi2002
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
Wenn ich mal an die DOS-Zeiten zurückdenke, dann mußt Du die ErrorLevel-Meldungen umdrehen.
3
2
1
0
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
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.
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