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.
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.
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.
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.
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"
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
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ę.
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.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!!!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)
Bardzo pomogło!! TYVM z666net start NameOfSercive 2>nul if errorlevel 2 goto AlreadyRunning if errorlevel 1 goto Error
...
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 ...
Moje 2 centy, mam nadzieję, że to pomoże]}:AlreadyRunning net stop NameOfSercive if errorlevel 1 goto Error :Error Echo ERROR!!1! Pause
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ą.
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ę.
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 - ServiceOnePersonalJeś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!!!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