Polecenie Windows, aby uzyskać status usługi?

Muszę znać stan usługi na końcu mojego skryptu wsadowego, który uruchamia ponownie usługi za pomocą "net stop thingie" i "net start thingie".

W moim najbardziej ulubionym świecie ideałów, chciałbym wysłać e-mail do siebie, aby czytać w mroźne zimowe noce, aby uspokoić się ciepłem i komfortem serwera, który wiem, że działa dobrze.

Żebyś wiedział, używam platformy Windows server 2003, a plik wsadowy wydawał się najlepszym wyborem. Nie mam nic przeciwko używaniu coś innego, i byłoby bardzo otwarte na sugestie, ale tylko ze względu na wiedzę (jak zombie pragnie mózgu, pomyślałem, dlaczego nie nadmuchać własne), czy istnieje Komenda, która pozwala mi sprawdzić stan usługi, w wierszu poleceń?

Czy mam przekierować wyjście polecenia do pliku?

Gdzie do cholery są moje spodnie? (Ojej, naprawdę mam nadzieję, że humor wstawiony w tym nie obrazi nikogo. Jest środa rano, a humoru też potrzebuję :P)

[Edytuj:] Rozwiązanie, którego użyłem, jest (już nie) dostępne do pobrania z --link zmieniono--

Jest używany jako zestaw zadań do wykonania w nocy, a sprawdzając mój e-mail rano, widzę, czy usługa została poprawnie uruchomiona.

Author: pb2q, 2009-04-29

12 answers

Using Windows Script:

Set ComputerObj = GetObject("WinNT://MYCOMPUTER")    
ComputerObj.Filter = Array("Service")    
For Each Service in ComputerObj    
    WScript.Echo "Service display name = " & Service.DisplayName    
    WScript.Echo "Service account name = " & Service.ServiceAccountName    
    WScript.Echo "Service executable   = " & Service.Path    
    WScript.Echo "Current status       = " & Service.Status    
Next

Możesz łatwo filtrować powyższe dla konkretnej usługi, którą chcesz.

 5
Author: MaSuGaNa,
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-04-29 12:38:10

Próbowałeś już?

C:\> for /f "tokens=2*" %a in ('sc query audiosrv ^| findstr STATE') do echo %b
4  RUNNING

C:\> for /f "tokens=2*" %a in ('sc query sharedaccess ^| findstr STATE') do echo %b
1  STOPPED

Zauważ, że wewnątrz pliku wsadowego podwoisz każdy znak procentowy.

 26
Author: Rômulo Ceccon,
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-04-29 12:44:09

Możesz zadzwonić net start "service name" na swoje usługi. Jeśli nie jest uruchomiony, uruchomi go i zwróci errorlevel=0, jeśli już się uruchomił, zwróci errorlevel=2.

 19
Author: JRL,
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-04-29 12:47:44

Za pomocą pstools - w szczególności psservice i "query" - na przykład:

psservice query "serviceName"
 12
Author: Marc Gravell,
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-04-29 12:30:33

Zobacz też:

NET START / FIND "Nazwa Usługi" > nul Jeśli błąd 1 ECHO usługa nie jest uruchomiona

Właśnie skopiowane z: http://ss64.com/nt/sc.html

 10
Author: Ros,
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
2010-10-03 08:07:30

Jeśli PowerShell jest dostępny dla ciebie...

Get-Service -DisplayName *Network* | ForEach-Object{Write-Host $_.Status : $_.Name}
Dam ci...
Stopped : napagent
Stopped : NetDDE
Stopped : NetDDEdsdm
Running : Netman
Running : Nla
Stopped : WMPNetworkSvc
Stopped : xmlprov

Możesz zastąpić ****sieć * * * * konkretną nazwą usługi, Jeśli tylko chcesz sprawdzić jedną usługę.

 9
Author: aphoria,
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-04-29 13:37:49

Może to będzie najlepszy sposób na uruchomienie usługi i sprawdzenie wyniku

Oczywiście z wewnątrz pliku typu Batch.BAT umieść coś takiego jak ten przykład, ale po prostu zamień "NameOfSercive"na nazwę usługi, którą chcesz i zamień linie REM na swój własny kod:

@ECHO OFF

REM Put whatever your Batch may do before trying to start the service

net start NameOfSercive 2>nul
if errorlevel 2 goto AlreadyRunning
if errorlevel 1 goto Error

REM Put Whatever you want in case Service was not running and start correctly

GOTO ContinueWithBatch

:AlreadyRunning
REM Put Whatever you want in case Service was already running
GOTO ContinueWithBatch

:Error
REM Put Whatever you want in case Service fail to start
GOTO ContinueWithBatch

:ContinueWithBatch

REM Put whatever else your Batch may do

Kolejną rzeczą jest sprawdzenie jego stanu bez zmiany go, ponieważ istnieje znacznie prostszy sposób, aby to zrobić, po prostu uruchom:

net start

Jako, że bez parametrów wyświetli listę z wszystkimi rozpoczęte usługi...

Więc prosty grep lub znajdź po nim na rurze pasowałby...

Oczywiście z wewnątrz pliku typu Batch.BAT umieść coś takiego jak ten przykład, ale po prostu zamień "NameOfSercive"na nazwę usługi, którą chcesz i zamień linie REM na swój własny kod:

@ECHO OFF

REM Put here any code to be run before check for Service

SET TemporalFile=TemporalFile.TXT
NET START | FIND /N "NameOfSercive" > %TemporalFile%
SET CountLines=0
FOR /F %%X IN (%TemporalFile%) DO SET /A CountLines=1+CountLines
IF 0==%CountLines% GOTO ServiceIsNotRunning

REM Put here any code to be run if Service Is Running

GOTO ContinueWithBatch

:ServiceIsNotRunning

REM Put here any code to be run if Service Is Not Running

GOTO ContinueWithBatch
:ContinueWithBatch
DEL -P %TemporalFile% 2>nul
SET TemporalFile=

REM Put here any code to be run after check for Service
Mam nadzieję, że to pomoże!! To jest to, czego zwykle używam.
 2
Author: z666zz666z,
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
2011-02-08 11:45:38

Widzę, że "Nick Kavadias" mówi to:

"zgodnie z tym http://www.computerhope.com/nethlp.htm powinien to być NET START / LIST ..."

Jeśli w Windows XP wpiszesz to:

NET START /LIST

Pojawi się błąd, po prostu wpisz zamiast

NET START

Lista /jest tylko dla Windows 2000... Jeśli w pełni przeczytać taką sieć można zobaczyć /lista jest tylko w sekcji Windows 2000.

Mam nadzieję, że to pomoże!!!
 2
Author: z666zz666z,
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
2011-02-08 11:54:51

Moim zamiarem było stworzenie skryptu, który włącza i wyłącza usługi (w 1 skrypcie)

net start NameOfSercive 2>nul
if errorlevel 2 goto AlreadyRunning
if errorlevel 1 goto Error

...

Bardzo pomogło!! TYVM z666

Ale gdy np. usługa jest wyłączona (także errorlevel =2?) idzie do "AlreadyRuning" i nigdy nie przychodzi do

if errorlevel 1 goto Error  ?!!

Potrzebowałem wyjścia dla tej sprawy ...

 :AlreadyRunning
 net stop NameOfSercive
 if errorlevel 1 goto Error


 :Error
 Echo ERROR!!1!
 Pause
Moje 2 centy, mam nadzieję, że to pomoże]}
 2
Author: xy77,
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
2011-06-11 17:07:14

Cóż, nie jestem pewien, czy możesz wysłać wyniki z pliku wsadowego. Jeśli mogę przedstawić alternatywną sugestię, która rozwiąże twój problem vbscript. Jestem daleki od świetnego z vbscript, ale można go użyć do odpytywania usług uruchomionych na lokalnej maszynie. Poniższy skrypt powiadomi Cię o stanie wszystkich usług uruchomionych na komputerze, na którym skrypt zostanie uruchomiony. Oczywiście będziesz chciał wymienić serwer smtp i adres e-mail. Jeśli jesteś częścią domeny i uruchamiasz ten skrypt jako uprzywilejowany użytkownik (muszą być administratorem NA zdalnej maszynie) możesz również odpytywać zdalne maszyny, zastępując localhost z fqdn.

Dim objComputer, objMessage
Dim strEmail

' If there is an error getting the status of a service it will attempt to move on to the next one
On Error Resume Next

' Email Setup
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Service Status Report"
objMessage.From = "[email protected]"
objMessage.To = "[email protected]"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.example.net"

'Server port (typically 25)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

Set objComputer = GetObject("WinNT://localhost")
objComputer.Filter = Array("Service")

For Each aService In objComputer
strEmail = strEmail &chr(10) & aService.Name & "=" & aService.Status
Next

objMessage.TextBody = strEmail
objMessage.Configuration.Fields.Update
objMessage.Send
Mam nadzieję, że to ci pomoże! Smacznego!

Edit: Ahh jeszcze jedno status usługi 4 oznacza, że usługa jest uruchomiona, status usługi 1 oznacza, że nie jest. Nie jestem pewien, co oznacza 2 lub 3, ale jestem gotów założyć, że zatrzymują się / zaczynają.

 1
Author: Sam Stelfox,
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-04-29 13:12:07

Zgodnie z tym http://www.computerhope.com/nethlp.htm powinien to być NET START / LIST, ale nie mogę go uruchomić przez XP box. Jestem pewien, że jest jakiś WMI, który da ci listę.

 0
Author: Nick Kavadias,
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-04-29 12:43:52

Ros kod, który zamieszczam, jest również po to, aby wiedzieć, ile usług jest uruchomionych...

Wyobraź sobie, że chcesz wiedzieć, ile usług jest podobnych do Oracle* wtedy wstawiasz Oracle zamiast NameOfSercive... i dostajesz liczbę usług typu Oracle * działających na zmiennej % CountLines% i jeśli chcesz coś zrobić, jeśli są tylko 4 możesz zrobić coś takiego:

IF 4 = = %CountLines % GOTO FourServicesAreRunning

To jest o wiele mocniejsze... a Twój kod nie pozwala Ci aby wiedzieć, czy pożądana usługa jest uruchomiona ... jeśli istnieje inny srecive zaczynający się o tej samej nazwie... imagine: - Serwis - ServiceOnePersonal

Jeśli wyszukasz ServiceOne, ale działa tylko ServiceOnePersonal, Twój kod powie, że ServiceOne działa...

Mój kod można łatwo zmienić, ponieważ czyta wszystkie linie pliku i czyta linię po linii, może również robić co chcesz dla każdej usługi... ZOBACZ TO:

@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

Oczywiście to tylko lista uruchomionych usług, ja nie znać każdy sposób, w jaki net może wyświetlić listę Nie uruchomionych usług...

Mam nadzieję, że to pomoże!!!
 0
Author: z666zz666z,
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
2011-02-08 12:52:37