none
Service Status abfrage funktioniert nicht RRS feed

  • Frage

  • Ich will remote einen Service Status abfragen. Jetzt ist das Problem das der Errorlevel nicht richtig ausgelesen wird.

    Wenn ich wie unten if not Errorlevel  1 verwende, dann gibt es mir immer aus das der Service gestartet ist, egal ob er läuft oder nicht. Wenn ich  if  Errorlevel  1 setze, dann gibt er mir immer aus das der Service nicht läuft, egal welchen Status er effektiv hat.


    sc %server% query "%service%"

    sc query "%service%" | find /I "STATE              : 4  RUNNING" >nul
    if not Errorlevel 1 (


    Echo ************************************************************
    Echo %date% %time%: Der Dienst "%service%" ist gestartet.
    Echo ************************************************************
      ) else (  
    Echo **********************************************************
    Echo %date% %time%: Der Dienst "%service%" ist NICHT gestartet.
    Echo **********************************************************
      )

     Danke für eure Hilfe.

      
    Montag, 28. Juli 2014 07:50

Antworten

  • > Wenn ich wie unten /if not Errorlevel  1 /verwende, dann gibt es mir
    > immer aus das der Service gestartet ist, egal ob er läuft oder nicht.
    > Wenn ich /if  Errorlevel  1 /setze, dann gibt er mir immer aus das der
    > Service nicht läuft, egal welchen Status er effektiv hat.
     
    Nicht nachvollziehbar... Ich kopiere Deine Zeilen in eine CMD und führe
    die lokal aus -> alles wunderbar...
     

    Martin

    Mal ein GUTES Buch über GPOs lesen?

    NO THEY ARE NOT EVIL, if you know what you are doing: Good or bad GPOs?
    And if IT bothers me - coke bottle design refreshment :))
    Montag, 28. Juli 2014 08:12
  • Hi,

    für solche Aufgaben eignet sich die Powershell wunderbar. Versuch es mal ;) 

    Diese Reihe von Artikeln beschreibt wunderbar, was du alles mit Get-Service machen kannst 

    http://4sysops.com/archives/managing-services-the-powershell-way-part-1/

    Gruß 

    Kamil 

    Montag, 28. Juli 2014 08:54
  • Also ich kenne mich mit Batch wenig bis gar nicht aus,

    aber kann es sein das der Errorlevel sich nur ändert wenn die Ausführung eines Kommandos fehlschlägt? Du fragst ja ab ob der Dienst läuft oder nicht, unabhängig vom Status des Dienstes wird das Kommando ausgeführt (Errorlevel = 0 ). 

    Mit Powershell funktioniert das etwas anders: 

    Du fragst mit 

    $service = Get-Service -Name Dienstname

    den Dienst ab, als Ergebnis bekommst du ein Objekt, welches Eigenschaften und Methoden hat. Mit 

    $service | Get-Member

    fragst du die Eigenschaften und Methoden ab. Eine Eigenschaft nennt sich Status, welche , wie der Name schon sagt, den aktuellen Status des Dienstes repräsentiert. Mit diesen Informationen kannst du ganz einfach eine Aktion bei einem bestimmten Dienststatus ausführen 

    If($service.Status -ne "Running"){
    $service.Start() # Startet den Dienst
    }

    Gruß

    Kamil

    Montag, 28. Juli 2014 09:30

Alle Antworten

  • > Wenn ich wie unten /if not Errorlevel  1 /verwende, dann gibt es mir
    > immer aus das der Service gestartet ist, egal ob er läuft oder nicht.
    > Wenn ich /if  Errorlevel  1 /setze, dann gibt er mir immer aus das der
    > Service nicht läuft, egal welchen Status er effektiv hat.
     
    Nicht nachvollziehbar... Ich kopiere Deine Zeilen in eine CMD und führe
    die lokal aus -> alles wunderbar...
     

    Martin

    Mal ein GUTES Buch über GPOs lesen?

    NO THEY ARE NOT EVIL, if you know what you are doing: Good or bad GPOs?
    And if IT bothers me - coke bottle design refreshment :))
    Montag, 28. Juli 2014 08:12
  • Ich kann es dir auch nicht sagen, ich mache das ja Remote auf einer VM, das sollte zwar keinen Einfluss haben, aber irgendwas funktioniert da nicht richtig.
    Montag, 28. Juli 2014 08:16
  • Hi,

    für solche Aufgaben eignet sich die Powershell wunderbar. Versuch es mal ;) 

    Diese Reihe von Artikeln beschreibt wunderbar, was du alles mit Get-Service machen kannst 

    http://4sysops.com/archives/managing-services-the-powershell-way-part-1/

    Gruß 

    Kamil 

    Montag, 28. Juli 2014 08:54
  • Danke für die Idee. Nach dem Mittag werde ich es mal ausprobieren. Ich habe festgestellt, das der Errorlevel auf dem Server immer gleich bleibt, unabhängig vom Servicestatus.

    Scheint irgendwie nicht richtig zu ändern. Auch wenn ich lokal auf dem Server die Abfrage mache. Ich denke das auch Powershell das nicht ändern kann. 

    Habt Ihr vielleicht ne Idee wieso der Errorlevel immer gleich bleibt? 

    Montag, 28. Juli 2014 09:14
  • Also ich kenne mich mit Batch wenig bis gar nicht aus,

    aber kann es sein das der Errorlevel sich nur ändert wenn die Ausführung eines Kommandos fehlschlägt? Du fragst ja ab ob der Dienst läuft oder nicht, unabhängig vom Status des Dienstes wird das Kommando ausgeführt (Errorlevel = 0 ). 

    Mit Powershell funktioniert das etwas anders: 

    Du fragst mit 

    $service = Get-Service -Name Dienstname

    den Dienst ab, als Ergebnis bekommst du ein Objekt, welches Eigenschaften und Methoden hat. Mit 

    $service | Get-Member

    fragst du die Eigenschaften und Methoden ab. Eine Eigenschaft nennt sich Status, welche , wie der Name schon sagt, den aktuellen Status des Dienstes repräsentiert. Mit diesen Informationen kannst du ganz einfach eine Aktion bei einem bestimmten Dienststatus ausführen 

    If($service.Status -ne "Running"){
    $service.Start() # Startet den Dienst
    }

    Gruß

    Kamil

    Montag, 28. Juli 2014 09:30
  • > Du fragst ja ab ob der Dienst läuft oder nicht, unabhängig vom Status
    > des Dienstes wird das Kommando ausgeführt (Errorlevel = 0 ).
     
    Der Errorlevel kommt vom anschließenden "find". Das paßt schon.
     

    Martin

    Mal ein GUTES Buch über GPOs lesen?

    NO THEY ARE NOT EVIL, if you know what you are doing: Good or bad GPOs?
    And if IT bothers me - coke bottle design refreshment :))
    Montag, 28. Juli 2014 10:34