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.
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ć.
14 answers
sc query "ServiceName" | find "RUNNING"
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...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
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
)
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
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ą
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.
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.
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.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
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
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
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.)
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$"
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