Wie zu testen, ob ein Dienst von der Befehlszeile ausgeführt werden

stimmen
42

Ich möchte in der Lage sein, zu fragen, ob ein Dienst von einer Windows-Batch-Datei ausgeführt wird. Ich weiß, dass ich verwenden kann:

sc query Servicename

aber, Dumps dies einen Text aus. Was ich wirklich will , ist für sie das festlegen errorlevelUmgebungsvariable , so dass ich Wirkung auf , dass nehmen.

Kennen Sie eine einfache Art und Weise kann ich dies tun?

UPDATE
Vielen Dank für die bisher Antworten. Ich bin die Lösungen besorgt, die den Text analysieren nicht auf nicht englischen Betriebssystemen arbeiten. Kennt jemand einen Weg , um diesen, oder werde ich habe , um die Kugel zu beißen und ein Konsolenprogramm schreiben , dieses Recht zu bekommen.

Veröffentlicht am 09/12/2008 um 16:37
quelle vom benutzer
In anderen Sprachen...                            


14 antworten

stimmen
65

sc query "ServiceName" | find "RUNNING"
Beantwortet am 09/12/2008 um 16:46
quelle vom benutzer

stimmen
14

Lassen Sie sich auf Fenster zur alten Schule der Batch-Programmierung gehen zurück

net start | find "Service Name"

Dies wird überall arbeiten ...

Beantwortet am 23/03/2011 um 15:22
quelle vom benutzer

stimmen
8

wenn Sie nicht den Befehl net kombinieren mit grep dagegen können Sie das folgende Skript verwenden.

@echo off
net start | grep -x "Service"
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo trouble
goto end
:started
echo started
goto end
:stopped
echo stopped
goto end
:end
Beantwortet am 09/12/2008 um 16:48
quelle vom benutzer

stimmen
4

Sie könnten mit dem wmic verwenden / locale Option

call wmic /locale:ms_409 service where (name="wsearch") get state /value | findstr State=Running
if %ErrorLevel% EQU 0 (
    echo Running
) else (
    echo Not running
)
Beantwortet am 28/12/2008 um 20:05
quelle vom benutzer

stimmen
2
sc query "Servicename" | findstr STATE

beispielsweise:

sc query "wuauserv" | findstr STATE

Zu berichten , was der Windows - Update - Dienst tut, laufende Messung / Pause usw.
Dies ist auch für Windows 10. Viele mich später.

Beantwortet am 01/12/2016 um 05:08
quelle vom benutzer

stimmen
2

ich würde vorschlagen WMIC Service WHERE "Name = 'SericeName'" GET Started

oder WMIC Service WHERE "Name = 'ServiceName'" GET ProcessId(ProcessId wird Null , wenn Dienst nicht gestartet wird)

Sie können die Fehlerstufe eingestellt basierend darauf, ob die ehemaligen returns „TRUE“ oder die letztere kehrt ungleich Null

Beantwortet am 14/12/2012 um 21:27
quelle vom benutzer

stimmen
2

Denken ein wenig außerhalb der Box hier werde ich, dass Powershell kann vorschlagen, auf eine Antwort up-to-date XP / 2003 Maschinen und sicher auf Vista / 2008 und neuere (statt .bat / .cmd). Jeder, der etwas Perl in ihrem Hintergrund hat, soll ziemlich schnell zu Hause fühlen.


$serviceName = "ServiceName";
$serviceStatus = (get-service "$serviceName").Status;

if ($serviceStatus -eq "Running") {
    echo "Service is Running";
}
else {
    #Could be Stopped, Stopping, Paused, or even Starting...
    echo "Service is $serviceStatus";
}

Eine andere Möglichkeit, wenn man erhebliche Investitionen in Batch haben, ist die PS-Skript als Einzeiler zu laufen, einen Exit-Code zurück.


@ECHO off
SET PS=powershell -nologo -command
%PS% "& {if((get-service SvcName).Status -eq 'Running'){exit 1}}"

ECHO.%ERRORLEVEL%

Die Ausführung als Einzeiler bekommt auch um die Standard - PS - Code Signaturrichtlinie auf Kosten der Unsauberkeit. Um die PS - Befehle in einer PS1 - Datei zu setzen und laufen wie powershell myCode.ps1Sie feststellen können Ihre Powershell - Skripts Unterzeichnung ist notwendig , sie in einer automatisierten Art und Weise ausgeführt werden (abhängig von Ihrer Umgebung). Siehe http://www.hanselman.com/blog/SigningPowerShellScripts.aspx für Details

Beantwortet am 20/07/2009 um 21:48
quelle vom benutzer

stimmen
1

Ich habe dies gefunden:

  sc query "ServiceName" | findstr RUNNING  

scheint rund um das Richtige zu tun. Aber ich mache mir Sorgen, dass nicht verallgemeinert ist genug, um auf Nicht-Englisch-Betriebssystemen zu arbeiten.

Beantwortet am 09/12/2008 um 16:48
quelle vom benutzer

stimmen
1

Versuchen

sc query state= all 

Eine Liste der Dienste und ob sie laufen oder nicht.

Beantwortet am 09/12/2008 um 16:47
quelle vom benutzer

stimmen
0

Ich bemerkte niemand die Verwendung von regulären Ausdrücken erwähnte bei der Verwendung von find/ findstr-basierten Antworten. Das kann für ähnlich benannten Dienste problematisch sein.

Lassen Sie uns sagen Sie zwei Dienste haben, CDPUserSvcundCDPUserSvc_54530

Wenn Sie die meisten der Verwendung find/ findstr-basierten Antworten hier so weit, werden Sie falsch-positive Ergebnisse für bekommen CDPUserSvcAbfragen , wenn nur CDPUserSvc_54530ausgeführt wird.

Die /rund /cSchalter für findstruns helfen kann , dass die Verwendung-Fall zu behandeln, sowie die Sonderzeichen, die das Ende der Zeile zeigt an ,$

Diese Abfrage wird nur den Betrieb des verifizieren CDPUserSvcService und ignoriertCDPUserSvc_54530

sc query|findstr /r /c:"CDPUserSvc$"

Beantwortet am 13/02/2018 um 05:45
quelle vom benutzer

stimmen
0

Verwenden Sie Cygwin Bash mit:

sc query "SomeService" |grep -qo RUNNING && echo "SomeService is running." || echo "SomeService is not running!"

(Stellen Sie sicher , Sie haben sc.exein Ihrer PATH.)

Beantwortet am 18/12/2017 um 08:02
quelle vom benutzer

stimmen
0
@ECHO OFF
REM testing at cmd : sc query "MSSQLSERVER" | findstr RUNNING
REM "MSSQLSERVER" is the name of Service for sample
sc query "MSSQLSERVER" %1 | findstr RUNNING
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo Oh noooo.. trouble mas bro
goto end
:started
echo "SQL Server (MSSQLSERVER)" is started
goto end
:stopped
echo "SQL Server (MSSQLSERVER)" is stopped
echo Starting service
net start "MSSQLSERVER"
goto end
:erro
echo Error please check your command.. mas bro 
goto end

:end
Beantwortet am 23/12/2016 um 02:42
quelle vom benutzer

stimmen
0
SERVICO.BAT
@echo off
echo Servico: %1
if "%1"=="" goto erro
sc query %1 | findstr RUNNING
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo trouble
goto end
:started
echo started
goto end
:stopped
echo stopped
goto end
:erro
echo sintaxe: servico NOMESERVICO
goto end

:end
Beantwortet am 05/12/2016 um 18:53
quelle vom benutzer

stimmen
0

Nur um in die Liste auf, wenn Sie Powershell verwenden.

sc.exe query "ServiceName" | findstr RUNNING

Der Befehl unten nicht , weil Arbeit scist ein Alias für Set-Content innerhalb Powershell.

sc query "ServiceName" | findstr RUNNING

find arbeiten auch aus irgendeinem Grund mir unbekannt auf Powershell nicht.

sc.exe query "ServiceName" | find RUNNING
Beantwortet am 04/08/2016 um 09:07
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more