Frage

Ich brauche den Status eines Dienstes am Ende meiner Batch-Skript wissen, welche Dienste mit „net stop thingie“ und „net start thingie“.

startet

In meiner Lieblings idealen Welt würde Ich mag den Zustand mir eine E-Mail, an kalten Winternächte zu lesen, mich mit der Wärme und den Komfort eines Servers zu versichern, dass ich weiß, läuft rechts.

Nur für Sie zu wissen, ich bin mit einer Windows-Server-2003-Plattform und eine Batch-Datei schien die beste Wahl. Ich kümmere mich nicht etwas anderes verwenden, und wäre sehr offen für Vorschläge, sondern nur um des Wissens (wie ein Zombie Gehirn sehnt, dachte ich, warum nicht meine eigenen aufzublasen), gibt es ein Befehl, der mir erlaubt, zu überprüfen, über den Status eines Dienstes, in der Befehlszeile?

Soll ich leite es einfach die Ausgabe des Befehls in eine Datei?

Wo zum Teufel ist meine Hose? (Gosh, ich wirklich in diesem eingefügten Humor hoffentlich niemanden beleidigt Sie Mittwoch Morgen ist und Humor auch ich brauche. P)

[Edit:] Die Lösung, die ich verwendet wird, ist nicht (mehr) zur Verfügung Download von --link geschwärzt -

Es wird als Aufgabe verwendet wird während der Nacht ausgeführt werden, und meine E-Mail am Morgen überprüft, wie ich sehe, ob der Dienst korrekt neu gestartet wird.

War es hilfreich?

Lösung

Verwenden von 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

Sie können die oben für den speziellen Service leicht filtern Sie wollen.

Andere Tipps

Haben Sie versucht, sc.exe?

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

Beachten Sie, dass in einer Batch-Datei, die Sie jedes Prozentzeichen verdoppeln würden.

Sie können net start "service name" auf Ihrem Dienst anrufen. Wenn es nicht gestartet ist, wird es es starten und zurück Errorlevel = 0, wenn es bereits angefangen hat wird es zurückkehren Errorlevel = 2.

Mit pstools - insbesondere psservice und "Abfrage" - zum Beispiel:

psservice query "serviceName"

siehe auch hier:

NET START | FIND "Servicename"> nul    IF Errorlevel 1 ECHO Der Dienst nicht ausgeführt

nur kopiert von: http://ss64.com/nt/sc.html

Wenn Powershell ist für Sie da ...

Get-Service -DisplayName *Network* | ForEach-Object{Write-Host $_.Status : $_.Name}

Werden Sie geben ...

Stopped : napagent
Stopped : NetDDE
Stopped : NetDDEdsdm
Running : Netman
Running : Nla
Stopped : WMPNetworkSvc
Stopped : xmlprov

können Sie ersetzen das **** **** Netzwerk mit einem bestimmten Service-Namen, wenn Sie nur einen Dienst müssen überprüfen.

Vielleicht könnte dies der beste Weg sein, einen Service und überprüfen Sie das Ergebnis starten

Natürlich aus dem Innern eines Batch wie FILE.BAT so etwas wie dieses Beispiel setzen, aber nur ersetzen „NameOfSercive“ mit den Service-Namen, den Sie mögen, und die REM-Linien mit Ihrem eigenen Code ersetzen:

@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

Eine andere Sache ist für seinen Zustand zu überprüfen, ohne es zu ändern, denn das ist es eine viel einfachere Art und Weise ist, es zu tun, nur laufen:

net start

Wie das, ohne Parameter wird eine Liste mit allen Dienstleistungen zeigen, die gestartet werden ...

So ein einfaches grep oder finden, nachdem es an einem Rohr passen würde ...

Natürlich aus dem Innern eines Batch wie FILE.BAT so etwas wie dieses Beispiel setzen, aber nur ersetzen „NameOfSercive“ mit den Service-Namen, den Sie mögen, und die REM-Linien mit Ihrem eigenen Code ersetzen:

@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

Hope dies kann helfen !! Es ist das, was ich normalerweise verwenden.

Nun ich sehe "Nick Kavadias" sage dies:

  

"nach dieser http://www.computerhope.com/nethlp.htm es sollte NET START / LIST sein ... "

Wenn Sie geben in Windows XP folgendermaßen aus:

NET START /LIST

Sie erhalten eine Fehlermeldung, geben Sie einfach anstelle

NET START

Die / LIST ist nur für Windows 2000 ... Wenn Sie, dass sie entsprechendes Web lesen würden Sie die / LIST sehen, ist nur auf Windows 2000-Seite.

Hoffe, das hilft !!!

meine Absicht war, ein Skript zu erstellen, die Dienste ON und OFF-Schalter (in 1-Skript)

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

...

hat mir sehr geholfen !! Tyvm z666

aber wenn z.B. Service ist deaktiviert (auch Errorlevel = 2?) geht es zu „AlreadyRuning“ und kommt nie zu

if errorlevel 1 goto Error  ?!!

ich wollte einen Ausgang für diesen Fall ...

 :AlreadyRunning
 net stop NameOfSercive
 if errorlevel 1 goto Error


 :Error
 Echo ERROR!!1!
 Pause

meine 2 Cents, hoffen, das hilft

Nun, ich bin nicht sicher, ob Sie die Ergebnisse, dass aus einer Batch-Datei per E-Mail können. Wenn ich einen Stellvertreter Vorschlag machen, die Ihr Problem Vbscript lösen würde. Ich bin weit davon entfernt groß mit vbscript aber Sie können es verwenden, um die Dienste zur Abfrage auf dem lokalen Rechner ausgeführt wird. Das Skript unten senden Ihnen den Status aller Dienste auf der Maschine läuft das Skript auf fuehrt wird. Sie wollen offensichtlich den SMTP-Server und die E-Mail-Adresse ersetzen. Wenn Sie Teil einer Domäne sind und Sie dieses Skript als privilegierter Benutzer (sie haben ein Administrator auf dem entfernten Rechner sein) Sie Remote-Rechner als auch durch Ersetzen localhost mit dem fqdn abfragen können.

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 = "service_report@noreply.net"
objMessage.To = "youraddress@example.net"
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

Hope dies hilft Ihnen! Genießen Sie!

Edit: Ahh eine weitere Sache, ein Service-Status von 4 bedeutet, dass der Dienst ausgeführt wird, ein Service-Status von 1 bedeutet, ist es nicht. Ich bin mir nicht sicher, welche 2 oder 3 bedeutet, aber ich bin bereit, sie zu wetten stoppen sind / zu starten.

nach diesem http://www.computerhope.com/nethlp.htm es sollte NET START / LIST sein, aber ich kann es nicht von XP-Box zu arbeiten bekommen. Ich bin sicher, es gibt einige WMI, dass Sie die Liste geben wird.

Ros der Code i auch Post ist zu wissen, wie viele Dienste ausgeführt werden ...

Stellen Sie sich vor Sie wissen möchten, wie viele Dienste wie Oracle sind * dann setzen Sie Oracle statt NameOfSercive ... und die Anzahl der Dienste wie Oracle erhalten * auf die Variable% Loser% ausgeführt wird und wenn Sie wollen, etwas zu tun, wenn es gibt nur 4 Sie können etwas tun:

IF 4 ==% Losees% GOTO FourServicesAreRunning

Das ist viel mächtiger ... und Ihr Code nicht lassen Sie wissen, ob gewünschten Dienst läuft ... wenn es eine andere srecive ist mit dem gleichen Namen beginnen ... vorstellen: -ServiceOne -ServiceOnePersonal

Wenn Sie ServiceOne suchen, aber es läuft nur Ihr ServiceOnePersonal Code wird sagen ServiceOne läuft ...

Mein Code kann easly geändert werden, da sie alle Zeilen der Datei und lesen Sie Zeile für Zeile liest, kann es auch tun, was Sie für jeden Dienst wollen ... sehen folgendermaßen aus:

@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

Natürlich Liste nur Dienste laufen, ich weiß nicht, jede mögliche Weise Netz kann nicht aufgelistet Dienste ausgeführt werden ...

Hoffe, das hilft !!!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top