Команда Windows для получения статуса службы? - PullRequest
21 голосов
/ 29 апреля 2009

Мне нужно знать статус службы в конце моего пакетного сценария, который перезапускает службы, используя «net stop thingie» и «net start thingie».

В моем самом любимом идеальном мире я хотел бы отправить по электронной почте это состояние, чтобы читать холодными зимними ночами, чтобы успокоить себя теплом и комфортом сервера, который, как я знаю, работает правильно.

Просто чтобы вы знали, я использую платформу Windows Server 2003, и пакетный файл казался лучшим выбором. Я не возражаю против использования чего-то другого, и был бы очень открыт для предложений, но только ради знания (как зомби жаждет мозгов, я подумал, почему бы не надуть себя), есть команда, которая позволяет мне о статусе сервиса, в командной строке?

Стоит ли просто перенаправить вывод команды в файл?

Где, черт возьми, мои штаны? (Черт возьми, я действительно надеюсь, что юмор, вставленный в это, никого не оскорбит. Это утро среды, и юмор мне тоже нужен: P)

[Редактировать:] Решение, которое я использовал (больше не доступно) доступно для скачивания с --link redacted -

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

Ответы [ 12 ]

0 голосов
/ 08 февраля 2011

Ros код, который я публикую, также предназначен для определения количества запущенных сервисов ...

Представьте, что вы хотите знать, сколько сервисов похоже на Oracle *, затем вместо NameOfSercive вы устанавливаете Oracle ... и вы получаете количество сервисов, подобных Oracle *, работающих с переменной% CountLines%, и если вы хотите что-то сделать Есть только 4, вы можете сделать что-то вроде этого:

IF 4 ==% CountLines% GOTO FourServicesAreRunning

Это намного мощнее ... и ваш код не позволяет вам узнать, запущена ли нужная служба ... если есть другой srecive, начинающийся с того же имени ... представьте: -ServiceOne -ServiceOnePersonal

Если вы ищете ServiceOne, но он работает только с ServiceOnePersonal, ваш код сообщит, что ServiceOne работает ...

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

@ECHO OFF
REM Put here any code to be run before check for Services

SET TemporalFile=TemporalFile.TXT
NET START > %TemporalFile%
SET CountLines=0
FOR /F "delims=" %%X IN (%TemporalFile%) DO SET /A CountLines=1+CountLines
SETLOCAL EnableDelayedExpansion
SET CountLine=0
FOR /F "delims=" %%X IN (%TemporalFile%) DO @(
 SET /A CountLine=1+CountLine

 REM Do whatever you want to each line here, remember first and last are special not service names

 IF 1==!CountLine! (

   REM Do whatever you want with special first line, not a service.

 ) ELSE IF %CountLines%==!CountLine! (

   REM Do whatever you want with special last line, not a service.

 ) ELSE (

   REM Do whatever you want with rest lines, for each service.
   REM    For example echo its position number and name:

   echo !CountLine! - %%X

   REM    Or filter by exact name (do not forget to not remove the three spaces at begining):
   IF "   NameOfService"=="%%X" (

     REM Do whatever you want with Service filtered.

   )
 )

 REM Do whatever more you want to all lines here, remember two first are special as last one

)

DEL -P %TemporalFile% 2>nul
SET TemporalFile=

REM Put here any code to be run after check for Services

Конечно, это только список запущенных служб, я не знаю, каким образом net может перечислять не запущенные службы ...

Надеюсь, это поможет !!!

0 голосов
/ 29 апреля 2009

в соответствии с этим http://www.computerhope.com/nethlp.htm это должен быть NET START / LIST, но я не могу заставить его работать на XP box. Я уверен, что есть какой-то WMI, который даст вам список.

...