Jak sprawdzić, czy usługa działa z wiersza poleceń

Chciałbym mieć możliwość sprawdzenia, czy usługa działa z pliku wsadowego systemu windows. Wiem, że mogę użyć:

SC query "ServiceName"

Ale to wyrzuca jakiś tekst. To, czego naprawdę chcę, to ustawić zmienną środowiskową errorlevel, abym mógł podjąć działania w tej sprawie.

Wiesz, jak Mogę to zrobić?

UPDATE
Dzięki za odpowiedzi na razie. Obawiam się, że rozwiązania, które analizują tekst, mogą nie działać na Nie-angielskie systemy operacyjne. Czy ktoś wie, jak to obejść, czy będę musiał ugryźć kulę i napisać program konsolowy, aby to naprawić.

Author: Scott Langham, 2008-12-09

14 answers

sc query "ServiceName" | find "RUNNING"
 67
Author: Igal Serban,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-09 15:46:14

Wróćmy do starej szkoły programowania wsadowego w systemie windows

net start | find "Service Name"
To zadziała wszędzie...
 14
Author: Shahin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-10 04:39:24

Jeśli nie masz nic przeciwko połączeniu komendy net z grepem, możesz użyć następującego skryptu.

@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
 8
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-09 15:48:15

Możesz użyć wmic z opcją / locale

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
)
 5
Author: NicJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-28 19:05:08

Myśląc trochę nieszablonowo tutaj proponuję, że powershell może być odpowiedzią na aktualne maszyny XP/2003, a na pewno Na Vista/2008 i nowsze (zamiast .bat/cmd). Każdy, kto ma jakiś Perl w swoim tle powinien czuć się jak w domu dość szybko.


$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";
}

Innym sposobem, jeśli zainwestujesz w batch, jest uruchomienie skryptu PS jako jednoliniowej, zwracając kod wyjścia.


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

ECHO.%ERRORLEVEL%

Uruchamianie jako Jednowierszowe również ominie domyślny kod PS podpisywanie polityki kosztem bałaganu. Aby umieścić polecenia PS w pliku. ps1 i uruchomić jak powershell myCode.ps1 może okazać się, że podpisanie skryptów powershell jest konieczne, aby uruchomić je w sposób zautomatyzowany(zależy od środowiska). Zobacz http://www.hanselman.com/blog/SigningPowerShellScripts.aspx dla szczegółów

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-20 20:48:57

Proponuję WMIC Service WHERE "Name = 'SericeName'" GET Started

Lub WMIC Service WHERE "Name = 'ServiceName'" GET ProcessId (ProcessId będzie równy zero, jeśli usługa nie zostanie uruchomiona)

Możesz ustawić poziom błędu na podstawie tego, czy pierwszy zwraca "TRUE", czy drugi Zwraca wartość niezerową

 3
Author: Mark Sowul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-14 20:27:28

Try

sc query state= all 

Dla listy usług i tego, czy są uruchomione, czy nie.

 2
Author: Galwegian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-09 15:47:25
sc query "servicename" | findstr STATE

Na przykład:

sc query "wuauserv" | findstr STATE

Aby zgłosić, co robi usługa Windows update, uruchamia/wstrzymuje itp.
jest to również dla systemu Windows 10. Podziękuj mi później.

 2
Author: Quack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-01 06:32:05

Znalazłem to:

  sc query "ServiceName" | findstr RUNNING  
Wydaje się, że postępuje właściwie. Ale obawiam się, że to nie jest wystarczająco uogólnione, aby pracować na nie-angielskich systemach operacyjnych.
 1
Author: Scott Langham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-10 04:40:05
@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
 1
Author: Muhammad Imron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-23 02:42:33

Po prostu dodać do listy, jeśli używasz Powershell.

sc.exe query "ServiceName" | findstr RUNNING

Poniższe polecenie nie działa, ponieważ sc jest aliasem do ustawiania zawartości w Powershell.

sc query "ServiceName" | findstr RUNNING

find również nie działa na Powershell z jakiegoś nieznanego mi powodu.

sc.exe query "ServiceName" | find RUNNING
 0
Author: Chris Voon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-04 09:07:16
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
 0
Author: Luis Ramos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-05 19:33:21

Użyj Cygwin Bash z:

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

(Upewnij się, że masz sc.exe na swojej drodze.)

 0
Author: not2qubit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-18 08:02:02

Zauważyłem, że nikt nie wspomniał o używaniu wyrażeń regularnych przy użyciu find/findstr-odpowiedzi na podstawie. Może to być problematyczne dla podobnie nazwanych usług.

Powiedzmy, że masz dwie usługi, CDPUserSvc i CDPUserSvc_54530

Jeśli używasz większości find/findstr-w oparciu o odpowiedzi tutaj do tej pory, otrzymasz fałszywych pozytywnych dla CDPUserSvc zapytań, gdy tylko CDPUserSvc_54530 jest uruchomiony.

Przełączniki /r i /c dla findstr mogą pomóc nam obsłużyć ten przypadek użycia, a także znak specjalny, który wskazuje koniec linii, $

To zapytanie zweryfikuje tylko działanie usługi CDPUserSvc i zignoruje CDPUserSvc_54530

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

 0
Author: kayleeFrye_onDeck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-13 05:45:16