admin1987
Goto Top

Batchdatei prüft ob Dienst gestartet ist

Hallo!

Ich möchte eine Batchdatei schreiben, welche prüft ob ein Dienst (SMTP-Server) gestartet ist.

Falls er nicht gestartet ist, soll er gestartet werden

Aber die Batch soll nicht beenden und neu starten, sondern nur starten wenn nicht gestartet!

Hat jemand eine Idee?

Danke und Gruß

Content-Key: 59220

Url: https://administrator.de/contentid/59220

Printed on: April 16, 2024 at 21:04 o'clock

Member: Dani
Dani May 18, 2007 at 08:50:28 (UTC)
Goto Top
Hallo adminit,
also ich probier mal mein Glück. Mein System ist WindowsXP Professional + SP2.
Version 0.1:
@echo off & setlocal

for /f "tokens=6 delims= " %%a in ('sc getkeyname Ablagemappe') do set dienst=%%a  
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do set status=%%b  
if /i "%status%" == "stopped" net start %status%  

pause
Du musst legendlich Ablagemappe durch deinen Dienstnamen ersetzen. Aber warte noch bis einer unseren Skriptexperten (z.B. Biber, bastla, miniversum) deinen Beitrag gelesen hat. Vielleicht geht's noch einfacher.


Gruß
Dani
Member: cykes
cykes May 18, 2007 at 09:09:14 (UTC)
Goto Top
Hi,

ginge auch über Errorlevel und der Statusabfrage, hier ein Beispiel für einige Dienste von der Microsoft Seite: http://support.microsoft.com/kb/194916/de


Gruß

cykes
Member: Biber
Biber May 18, 2007 at 21:32:03 (UTC)
Goto Top
Moin admin1987,

Danis Beispiel und cykes M$-Link (THX @beide) beantworten die Frage eigentlich vollständig.

Ich wollte mich nur kurz hier einschalten, weil Danis Skizze einen Flüchtigkeitsfehler enthält:

Die vorletzte Zeile heißt natürlich:
STREICHE: if /i "%status%" == "stopped" net start %status%
SETZE: if /i "%status%" == "stopped" net start %dienst%

Schönes Wochenende
Biber
Member: Dani
Dani May 18, 2007 at 21:50:45 (UTC)
Goto Top
Hi Biber!
Ich wollte mich nur kurz hier einschalten, weil Danis Skizze einen Flüchtigkeitsfehler enthält:
Verdammt....ich dachte schon, ich schaffe eine Woche wo mir sowas nicht passiert. face-plain Gut das es dich gibt...


Thx & schönes Wochenende auch dir
Dani
Member: admin1987
admin1987 May 21, 2007 at 09:12:27 (UTC)
Goto Top
Ok

ich habe jetzt folgendes cript als status.bat gespeichert

wenn ich nun manuell den SMTP-Dienst beende und danach das Script ausführe tut sich nichts.


@echo off & setlocal

REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst
for /f "tokens=6 delims= " %%a in ('sc getkeyname SMTPSVC') do set dienst=%%a  
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do set status=%%b  
if /i "%status%" == "stopped" net start %dienst%  

pause


Hat jemand von euch eine Idee wieso?

Danke
Member: Dani
Dani May 21, 2007 at 14:17:03 (UTC)
Goto Top
Hmmm...der Dienstname passt??

Änder deinen Batch mal ab:
@echo off & setlocal

REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst
for /f "tokens=6 delims= " %%a in ('sc getkeyname SMTPSVC') do set dienst=%%a  
echo Dienst: %dienst%
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do set status=%%b  
echo Status: %status%
if /i "%status%" == "stopped" net start %dienst%  

pause
Falls dort nichts ausgegeben wird, probier folgende Variante:
@echo off & setlocal EnableDelayedExpansion

REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst
for /f "tokens=6 delims= " %%a in ('sc getkeyname SMTPSVC') do set dienst=%%a  
echo Dienst: !dienst!
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query !dienst!') do set status=%%b  
echo Status: !status!
if /i "!status!" == "stopped" net start !dienst!  


Gruß
Dani
Member: admin1987
admin1987 May 21, 2007 at 14:24:29 (UTC)
Goto Top
hmm danke, aber irgendwie komm ch da auch nicht weiter.

Bekomme nun folgendes im cmd-shell zu sehen:


Dienst: installierter
Status:

Drücken Sie eine beliebige Taste...


ich denk schon das der Dienstname stimmt weil ich den Simple Mail Transfer Protocol-Dienst ja auch manuell mit net start SMTPVC starten und mit net stop smtpvc stoppen kann...

Hmm.. An was kann es noch liegen?

Gruß und danke
Member: Dani
Dani May 21, 2007 at 14:33:56 (UTC)
Goto Top
Führe mal bitte sc getkeyname SMTPSVC direkt in der Konsole aus und poste bitte die Ausgabe. Wie du etwas aus der CMD kopieren kannst, weißt du natürlich! face-smile Ansonsten Rechtsklick => Alles markieren und die RETURN - Taste drücken.


Gruß
Dani
Member: admin1987
admin1987 May 22, 2007 at 05:28:35 (UTC)
Goto Top
Guten Morgen,

hier der Output, anscheinend doch nicht der richtige Name aber welchen Namen muss ich den dort nehmen. Und mit net start SMTPSVC funktionier es doch...??!

C:\Dokumente und Einstellungen\Administrator>sc getkeyname SMTPSVC
[SC] GetServiceKeyName FEHLER 1060:

Der angegebene Dienst ist kein installierter Dienst.


an was kann das liegen?

Gruß
Member: cykes
cykes May 22, 2007 at 06:51:35 (UTC)
Goto Top
Hi,

ist glaub ein kleiner Denkfehler drin (schon der zweite, Dani, tsts *g*).
Probier es mal mit: sc getkeyname "Simple Mail Transfer Protocol (SMTP)"

Gruß

cykes
Member: admin1987
admin1987 May 22, 2007 at 06:58:56 (UTC)
Goto Top
ok danke face-wink kommt vor

so ok jetzt habe ich folgenden Output

C:\Dokumente und Einstellungen\Administrator>sc getkeyname "Simple Mail Transfer
Protocol (SMTP)"
[SC] GetServiceKeyName ERFOLG
Name = SMTPSVC

Also der Name stimmt.!
Was ist dann falsch?

Gruß chris
Member: cykes
cykes May 22, 2007 at 07:28:52 (UTC)
Goto Top
Hi,

bau das mal in die Zeile:

for /f "tokens=6 delims= " %%a in ('sc getkeyname SMTPSVC') do set dienst=%%a

ein.

Bzw. ersetze die Zeile mal durch:

for /f "tokens=6 delims= " %%a in ('sc getkeyname "Simple Mail Transfer Protocol (SMTP)"') do set dienst=%%a

Gruß

cykes
Member: admin1987
admin1987 May 22, 2007 at 07:47:17 (UTC)
Goto Top
so vielen dank

jetzt bekomme ich folgenden Output

Dienst:
Status: (0x0)
Drücken Sie eine beliebige Taste . . .

allerdings startet er den dienst nicht wenn ich ihn davor beendet habe?!
Dann stimmt die net start anweisung auch nicht oder`?

gruß chris

Und hier nochmal mein komplettes Script

@echo off & setlocal EnableDelayedExpansion

REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst
for /f "tokens=6 delims= " %%a in ('sc getkeyname "Simple Mail Transfer Protocol (SMTP)"') do set dienst=%%a
echo Dienst: !dienst!
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query !dienst!') do set status=%%b
echo Status: !status!
if /i "!status!" == "stopped" net start !dienst!

pause
Member: cykes
cykes May 22, 2007 at 09:42:10 (UTC)
Goto Top
Hi,

irgendwas stimmt da mit den delims noch nicht.

Habe selbst nochmal ein bisschen rumprobiert und eine funktionierende, aber sicher nicht
der Biberschen Batch-Ethik entsprechende Lösung gefunden.
Also Biber nochmal wegen kleiner Überarbeitung ansprechen face-wink

@echo off & setlocal EnableDelayedExpansion

REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst
for /f "tokens=6 delims= " %%a in ('sc getkeyname "Simple Mail Transfer Protocol (SMTP)"') do set dienst=%%a  
echo Dienst: %dienst%
for /f "tokens=2 skip=3 delims=:" %%b in ('sc query %dienst%') do if /i "%%b" == " 1  STOPPED " set status=STOPPED  
echo Status: %status%
if /i %status% == STOPPED net start %dienst%

Gruß

cykes

P.S. Das Problem in Deiner bzw. Danis Version ist, dass "sc query" mehrere Zeilen ausgibt und die Status-Variable mit dem Inhalt der letzten Ausgabezeile überschrieben wird.
Member: cykes
cykes May 22, 2007 at 12:25:49 (UTC)
Goto Top
und noch eine kleine Schönheitskorrektur:

@echo off & setlocal EnableDelayedExpansion

REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst
for /f "tokens=6 delims= " %%a in ('sc getkeyname "Simple Mail Transfer Protocol (SMTP)"') do set dienst=%%a  
echo Dienst: %dienst%
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do if /i "%%b" == "STOPPED" set status=%%b  
echo Status: %status%
if /i %status% == STOPPED net start %dienst%

Gruß

cykes

P.S. Das lässt sich jetzt noch um den Dienstatus PAUSED erweitern, falls das bei Dir vorkommen
sollte, dann muss anstatt "net start ..." "net continue" ansgeführt werden.
Member: admin1987
admin1987 May 22, 2007 at 13:20:29 (UTC)
Goto Top
danke aber ich bekomme noch eine meldung

Dienst:
Status:
"net" ist syntaktisch an dieser Stelle nicht verarbeitbar.

gruß
Member: cykes
cykes May 22, 2007 at 13:26:07 (UTC)
Goto Top
Hi,

das passiert, wenn der Dienst läuft, wenn Du ihn mal stoppst (oder testweise mal einen anderen
Dienst nimmst - z.B. Ablagemappe oder Taskplaner), dann funktioniert das ganze.

Alternativ kannst Du nach der REM ... Zeile (3. Zeile) noch folgendes einfügen:

set status=RUNNING

Gruß

cykes
Member: bastla
bastla May 22, 2007 at 16:58:26 (UTC)
Goto Top
@cykes

Wenn ich auch noch ein wenig "mitverschönern" darf, würde ich folgende Variante vorschlagen:
@echo off & setlocal
REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst
for /f "tokens=6 delims= " %%a in ('sc getkeyname "Simple Mail Transfer Protocol (SMTP)"') do set dienst=%%a  
echo Dienst: %dienst%
set Status=
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do if not defined Status set Status=%%b  
echo Status: %Status%
if /i "%Status%" == "STOPPED" net start %dienst%  
Damit wird jeder zurückgegebene Status in der Variablen %Status% gespeichert (nicht nur "STOPPED" - falls man's mal braucht), und die von admin1987 genannte Fehlermeldung sollte auch der Vergangenheit angehören ...

Grüße
bastla
Member: cykes
cykes May 22, 2007 at 18:14:08 (UTC)
Goto Top
@bastla Danke für die Korrektur/Ergänzung face-wink
Hab mich vorhin nur mal ein bisschen damit auseinandergesetzt, war son Schnellschuss face-wink
Member: Biber
Biber May 22, 2007 at 19:31:05 (UTC)
Goto Top
Moin,

wenn ich auch noch drei Anregungen beisteuern darf...

1. Wenn ich genau weiß, dass der (eine einzige) Dienst, um den es geht, der SMTP-Dienst ist,
und weiß, das der auf dem Rechner auch "normalerweise" laufen soll, dann brauche ich wirklich nicht über ein mühsam abgetipptes "ich such mal nach dem Displaynamen Simple Mail Transfer Protocol (SMTP)") den eigentlichen ServiceKeynamen ermitteln.
Den Namen kann ich dann auch genauso fest verdrahtet in der Batch hinterlegen wie den Displaynamen.
Von daher würde ich mir die ganze erste FOR /F-Anweisung schenken.

2. Von der zweiten SC-Ausgabe brauche ich nur eine Zeile: die mit dem Schlüsselwort STATE.
Da steht immer
        STATE              : 4  RUNNING
-oder-
        STATE              : 1  STOPPED
oder eben nichts, wenn es den gesuchten Dienstnamen gar nicht gibt.
Also ziehe ich diese "STATE " (plus ein Leerzeichen-Zeile mit Find heraus.

3. Den dritten Fall ("wenn es den gesuchten Dienstnamen gar nicht gibt"), der immer zu irgendetwas Hässlichem führt,
weil dann %status% gar nicht gesetzt wird, den fange ich auch ab, indem ich genau diese Variable vorher setze.
Dann habe ich zumindest die Option, auf diesen Fehlerfall zu reagieren. Beispiel siehe unten.

Dann verkürzt sich die ganze Arie auf:
@echo off & setlocal
set Status=NichDa
for /f "tokens=4  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start %dienst%  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      pause
)
[ungetestete Skizze]
Ginge natürlich noch kürzer, aber so ist es noch ganz übersichtlich und wartbar.

Gruss
Biber
Member: cykes
cykes May 23, 2007 at 08:46:16 (UTC)
Goto Top
Biber hat mal wieder die schönste Lösung face-wink
Member: admin1987
admin1987 May 23, 2007 at 08:53:12 (UTC)
Goto Top
Vielen Dank

aber ich bekomme immer noch einen Fehler,
habe das Script von Biber kopiert.

D:\batch>exchangechecker.bat
""') do set Status=%b" ist syntaktisch an dieser Stelle nicht verarbeitbar.

?? An was liegt es noch?

Danke und GRuß
Member: cykes
cykes May 23, 2007 at 09:01:13 (UTC)
Goto Top
Ui, Biber hat ein kleinen Tippfehler gemacht face-wink

Die Zeile:

for /f "tokens=4  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b  

muss heissen:

for /f "tokens=4"  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b  

Probier das mal aus...

Gruß

cykes
Member: admin1987
admin1987 May 23, 2007 at 09:06:13 (UTC)
Goto Top
hmm scheint eine schwere geburt zu sein

bekomme nun folgenden fehler cykes

"*"" ist syntaktisch an dieser Stelle nicht verarbeitbar.
[Debug] Status: NichDa
Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
Drücken Sie eine beliebige Taste . . .


habe dieses script

@echo off & setlocal
set Status=NichDa
for /f "tokens=4
"** %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start %dienst%
if /i "%Status%" == "NichDa" (
echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
pause
)

lg
Member: cykes
cykes May 23, 2007 at 09:13:00 (UTC)
Goto Top
Sorry, die Sterne waren in der ersten Version reingerutscht, wollte nur das " fett hervorheben, ist inszwischen oben korrigiert. Also bitte diese Zeile übernehmen (Sterne weglöschen!)....

Zu Sicherheit nochmal das komplette Script (so läuft es bei mir problemlos):

@echo off & setlocal
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start %dienst%  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      pause
)
Member: admin1987
admin1987 May 23, 2007 at 09:34:48 (UTC)
Goto Top
ok und wieder sind wir ein stückchen weiter *g*

Und den letzen Fehler habe ich voll selbst behoben bei deinem Script kam folgender Output.

D:\batch>exchangechecker.bat
[Debug] Status: STOPPED
Folgende Windows-Dienste sind gestartet:

Anmeldedienst
Anwendungskompatibilitäts-Suchdienst
Arbeitsstationsdienst
Automatische Updates
COM+-Ereignissystem
COM+-Systemanwendung
Computerbrowser
Daemon für 'Trivial FTP'
Dateireplikationsdienst
DCOM-Server-Prozessstart
DHCP-Client
DHCP-Server
Distributed Transaction Coordinator
DNS-Client
DNS-Server
Druckwarteschlange
Einfache TCP/IP-Dienste
Einzelinstanz-Speicherung (Groveler)
Ereignisprotokoll
Fehlerberichterstattungsdienst
FTP-Publishingdienst
Geschützter Speicher
GFI FAXmaker Fax Server
GFI FAXmaker Message Transfer Agent
Hilfe und Support
HTTP-SSL
IBM Remote Supervisor Adapter II
IIS Verwaltungsdienst
Intelligenter Hintergrundübertragungsdienst
Internetauthentifizierungsdienst
IPSEC-Dienste
Kaspersky Administrationsagent
Kaspersky Administrationsserver
Kaspersky Anti-Virus 6.0
Kaspersky Lab Cisco NAC Posture Validation Server
Kaspersky Security 5.5 for Microsoft Exchange Server 2003
Kerberos-Schlüsselverteilungscenter
Kryptografiedienste
Lizenzprotokollierung
Machine Debug Manager
McAfee Framework-Dienst
Microsoft Exchange IMAP4
Microsoft Exchange MTA-Stacks
Microsoft Exchange POP3
Microsoft Exchange-Ereignis
Microsoft Exchange-Informationsspeicher
Microsoft Exchange-Routingmodul
Microsoft Exchange-Standortreplikationsdienst
Microsoft Exchange-Systemaufsicht
Microsoft Exchange-Verwaltung
Microsoft Search
MSSQL$SBSMONITORING
Nachrichtendienst
Netzwerkverbindungen
NLA (Network Location Awareness)
NT-LM-Sicherheitsdienst
Plug & Play
RAS-Verbindungsverwaltung
Remoteprozeduraufruf (RPC)
Remoteregistrierung
SBCore Service
Sekundäre Anmeldung
Server
SharePoint Zeitgeberdienst
Shellhardwareerkennung
Sicherheitskontenverwaltung
SQL Server VSS Writer
SQLAgent$SBSMONITORING
Systemereignisbenachrichtigung
Taskplaner
TCP/IP-NetBIOS-Hilfsprogramm
TD Entfernungswerk Dienst
Telefonie
Terminaldienste
Update Services
User Profile Hive Cleanup
Verteiltes Dateisystem (DFS)
Verwaltung logischer Datenträger
WebClient
Windows Internal Database (MICROSOFT##SSEE)
Windows-Bereitstellungsdiensteserver
Windows-Verwaltungsinstrumentation
Windows-Zeitgeber
WINS (Windows Internet Name Service)
WWW-Publishingdienst
Zertifikatdienste

Der Befehl wurde erfolgreich ausgeführt.


Ich habe dein Script dann so abgeändert

@echo off & setlocal
set Status=NichDa
for /f "tokens=4" %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start SMTPSVC
if /i "%Status%" == "NichDa" (
echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
pause
)


Und es funktioniert. Ich habe statt net start %DIENST% einfach net start SMTPSVC gemacht


Dann danke ich und mein Exchangeserver, welcher ganz gerne den SMTP-Dienst nach einem IMF-Update stoppt euch alle einmal ganz herzlich für die Hilfe

lg chris
Member: cykes
cykes May 23, 2007 at 09:43:26 (UTC)
Goto Top
Was lange währt ... face-wink

Könntest Du abschliessend den Beitrag noch als gelöst markieren?
Member: admin1987
admin1987 May 23, 2007 at 09:50:22 (UTC)
Goto Top
Jap ich poste hier noch mein endgültiges Script welches ich täglich alle 15 Minuten von 04.30 bis 21.30 ausführen lasse.


@echo off & setlocal


ECHO SMTP-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start SMTPSVC  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)


ECHO IMAP-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query IMAP4Svc ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start IMAP4Svc  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)

ECHO MTA-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query MSExchangeMTA ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start MSExchangeMTA  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)

ECHO Pop3-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query POP3Svc ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start POP3Svc  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)


ECHO Exchange-Ereignis-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query MSExchangeES ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start MSExchangeES  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)


ECHO Exchange-Informationsspeicher-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query MSExchangeIS ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start MSExchangeIS  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)


ECHO Exchange-Routungs-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query RESvc ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start RESvc  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)


ECHO Exchange-Standort-Replikationsdienst-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query MSExchangeSRS ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start MSExchangeSRS  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)

ECHO Exchange-Systemaufsichts-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query MSExchangeSA ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start MSExchangeSA  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)

ECHO Exchange-Verwaltungs-Dienst checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query MSExchangeMGMT ^|find "STATE "') do set Status=%%b  
echo [Debug] Status: %Status%
if /i "%Status%" == "STOPPED" net start MSExchangeMGMT  
if /i "%Status%" == "NichDa" (   
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin..
      
)



lg
[Edit Biber] Auf formatiert. [/Edit]
Member: Biber
Biber May 23, 2007 at 19:01:29 (UTC)
Goto Top
Moin admin1987,

jetzt haben wir uns alle gemeinsam so lange mit dieser Anforderung herumgebalgt,
da möchte ich Deine Musterlösung noch bisschen wartbarer zusammendampfen.

Vorschlag, der exakt den gleichen Funktionsumfang bieten sollte wie die vorhandene Lösung:
::----------snipp SvcStarter.bat ----------::
:: Placed in the Public Domain Biber 2007
@echo off & setlocal
Set "Suchstr=DisplayName"  
Set "SuchStr=%suchstr%:ServiceKeyname"  
goto :skipSomeLines
----ab hier können alle Dienste nach dem skizzierten Muster eingetragen werden...
DisplayName:ServiceKeyname=SMTP-Dienst:SMTPSvc
DisplayName:ServiceKeyname=IMAP-Dienst:IMAP4Svc
DisplayName:ServiceKeyname=MTA-Dienst:MSExchangeMTA
DisplayName:ServiceKeyname=Pop3-Dienst:POP3Svc
DisplayName:ServiceKeyname=Exchange-Ereignis-Dienst:MSExchangeES
DisplayName:ServiceKeyname=Exchange-Informationsspeicher-Dienst:MSExchangeIS
DisplayName:ServiceKeyname=Exchange-Routungs-Dienst:RESvc
DisplayName:ServiceKeyname=Exchange-Standort-Replikationsdienst-Dienst:MSExchangeSRS
DisplayName:ServiceKeyname=Exchange-Systemaufsichts-Dienst:MSExchangeSA
DisplayName:ServiceKeyname=Exchange-Verwaltungs-Dienst:MSExchangeMGMT
----bis hier können alle Dienste nach dem skizzierten Muster eingetragen werden...
:SkipSomeLines
for /f "tokens=3,4 delims=:=" %%i in ('findstr /i /C:"%SuchStr%" %0') do (  
       call :CheckSvc %%i %%j
)
goto :eof

:CheckSvc Param1=DisplayName Param2=ServiceKeyname
ECHO %1 checken
set Status=NichDa
for /f "tokens=4"  %%b in ('sc query %2 ^|find "STATE "') do set Status=%%b  
if /i "%Status%" == "NichDa" (   
      echo [Fehler] %2 [%1] nicht gefunden...hol mal den Admin..
) ELSE (
echo [Debug] Status von %1 [%2]: %Status%
if /i "%Status%" == "STOPPED" net start %2        
)
goto :eof
::----------snapp SvcStarter.bat -----------::
[Ungetestete Skizze]

Grüße
Biber
...und THX @cykes für die Tippfehlerkorrektur