Как проверить, запущен ли сервис из командной строки - PullRequest
48 голосов
/ 09 декабря 2008

Я бы хотел иметь возможность запросить, работает ли служба из пакетного файла Windows. Я знаю, что могу использовать:

sc запрос "ServiceName"

но это выдает некоторый текст. Я действительно хочу, чтобы он установил переменную окружения errorlevel, чтобы я мог предпринять соответствующие действия.

Вы знаете простой способ, которым я могу это сделать?

UPDATE
Спасибо за ответы до сих пор. Я обеспокоен тем, что решения, которые разбирают текст, могут не работать в неанглийских операционных системах. Кто-нибудь знает способ обойти это, или мне придется прикусить пулю и написать консольную программу, чтобы сделать это правильно.

Ответы [ 14 ]

0 голосов
/ 13 февраля 2018

Я заметил, что никто не упоминал об использовании регулярных выражений при использовании ответов на основе find / findstr. Это может быть проблематично для одноименных сервисов.

Допустим, у вас есть две службы, CDPUserSvc и CDPUserSvc_54530

Если вы до сих пор используете здесь большинство ответов на основе find / findstr, вы получите ложноположительные результаты для CDPUserSvc запросов, когда работает только CDPUserSvc_54530.

Переключатели /r и /c для findstr могут помочь нам обработать этот вариант использования, а также специальный символ, обозначающий конец строки, $

Этот запрос будет проверять только работу службы CDPUserSvc и игнорировать CDPUserSvc_54530

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

0 голосов
/ 18 декабря 2017

Использование Cygwin Bash с:

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

(убедитесь, что у вас есть sc.exe в вашей PATH.)

0 голосов
/ 05 декабря 2016
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 голосов
/ 04 августа 2016

Просто чтобы добавить в список, если вы используете Powershell.

sc.exe query "ServiceName" | findstr RUNNING

Команда ниже не работает, потому что sc является псевдонимом Set-Content в Powershell.

sc query "ServiceName" | findstr RUNNING

find также не работает на Powershell по неизвестной мне причине.

sc.exe query "ServiceName" | find RUNNING
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...