Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batchdatei prüft ob Dienst gestartet ist

Frage Entwicklung Batch & Shell

Mitglied: admin1987

admin1987 (Level 2) - Jetzt verbinden

18.05.2007, aktualisiert 23.05.2007, 31950 Aufrufe, 29 Kommentare

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ß
29 Antworten
Mitglied: Dani
18.05.2007 um 10:50 Uhr
Hallo adminit,
also ich probier mal mein Glück. Mein System ist WindowsXP Professional + SP2.
Version 0.1:
01.
@echo off & setlocal 
02.
 
03.
for /f "tokens=6 delims= " %%a in ('sc getkeyname Ablagemappe') do set dienst=%%a 
04.
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do set status=%%b 
05.
if /i "%status%" == "stopped" net start %status% 
06.
 
07.
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
Bitte warten ..
Mitglied: cykes
18.05.2007 um 11:09 Uhr
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
Bitte warten ..
Mitglied: Biber
18.05.2007 um 23:32 Uhr
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
Bitte warten ..
Mitglied: Dani
18.05.2007 um 23:50 Uhr
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. Gut das es dich gibt...


Thx & schönes Wochenende auch dir
Dani
Bitte warten ..
Mitglied: admin1987
21.05.2007 um 11:12 Uhr
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.


01.
@echo off & setlocal 
02.
 
03.
REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst 
04.
for /f "tokens=6 delims= " %%a in ('sc getkeyname SMTPSVC') do set dienst=%%a 
05.
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do set status=%%b 
06.
if /i "%status%" == "stopped" net start %dienst% 
07.
 
08.
pause

Hat jemand von euch eine Idee wieso?

Danke
Bitte warten ..
Mitglied: Dani
21.05.2007 um 16:17 Uhr
Hmmm...der Dienstname passt??

Änder deinen Batch mal ab:
01.
@echo off & setlocal 
02.
 
03.
REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst 
04.
for /f "tokens=6 delims= " %%a in ('sc getkeyname SMTPSVC') do set dienst=%%a 
05.
echo Dienst: %dienst% 
06.
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do set status=%%b 
07.
echo Status: %status% 
08.
if /i "%status%" == "stopped" net start %dienst% 
09.
 
10.
pause
Falls dort nichts ausgegeben wird, probier folgende Variante:
01.
@echo off & setlocal EnableDelayedExpansion 
02.
 
03.
REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst 
04.
for /f "tokens=6 delims= " %%a in ('sc getkeyname SMTPSVC') do set dienst=%%a 
05.
echo Dienst: !dienst! 
06.
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query !dienst!') do set status=%%b 
07.
echo Status: !status! 
08.
if /i "!status!" == "stopped" net start !dienst!

Gruß
Dani
Bitte warten ..
Mitglied: admin1987
21.05.2007 um 16:24 Uhr
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
Bitte warten ..
Mitglied: Dani
21.05.2007 um 16:33 Uhr
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! Ansonsten Rechtsklick => Alles markieren und die RETURN - Taste drücken.


Gruß
Dani
Bitte warten ..
Mitglied: admin1987
22.05.2007 um 07:28 Uhr
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ß
Bitte warten ..
Mitglied: cykes
22.05.2007 um 08:51 Uhr
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
Bitte warten ..
Mitglied: admin1987
22.05.2007 um 08:58 Uhr
ok danke 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
Bitte warten ..
Mitglied: cykes
22.05.2007 um 09:28 Uhr
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
Bitte warten ..
Mitglied: admin1987
22.05.2007 um 09:47 Uhr
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
Bitte warten ..
Mitglied: cykes
22.05.2007 um 11:42 Uhr
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

01.
@echo off & setlocal EnableDelayedExpansion 
02.
 
03.
REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst 
04.
for /f "tokens=6 delims= " %%a in ('sc getkeyname "Simple Mail Transfer Protocol (SMTP)"') do set dienst=%%a 
05.
echo Dienst: %dienst% 
06.
for /f "tokens=2 skip=3 delims=:" %%b in ('sc query %dienst%') do if /i "%%b" == " 1  STOPPED " set status=STOPPED 
07.
echo Status: %status% 
08.
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.
Bitte warten ..
Mitglied: cykes
22.05.2007 um 14:25 Uhr
und noch eine kleine Schönheitskorrektur:

01.
@echo off & setlocal EnableDelayedExpansion 
02.
 
03.
REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst 
04.
for /f "tokens=6 delims= " %%a in ('sc getkeyname "Simple Mail Transfer Protocol (SMTP)"') do set dienst=%%a 
05.
echo Dienst: %dienst% 
06.
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do if /i "%%b" == "STOPPED" set status=%%b 
07.
echo Status: %status% 
08.
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.
Bitte warten ..
Mitglied: admin1987
22.05.2007 um 15:20 Uhr
danke aber ich bekomme noch eine meldung

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

gruß
Bitte warten ..
Mitglied: cykes
22.05.2007 um 15:26 Uhr
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:

01.
set status=RUNNING
Gruß

cykes
Bitte warten ..
Mitglied: bastla
22.05.2007 um 18:58 Uhr
@cykes

Wenn ich auch noch ein wenig "mitverschönern" darf, würde ich folgende Variante vorschlagen:
01.
@echo off & setlocal 
02.
REM Prüfen und bei Status nicht gestartet starten von: SMTP-Dienst 
03.
for /f "tokens=6 delims= " %%a in ('sc getkeyname "Simple Mail Transfer Protocol (SMTP)"') do set dienst=%%a 
04.
echo Dienst: %dienst% 
05.
set Status= 
06.
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do if not defined Status set Status=%%b 
07.
echo Status: %Status% 
08.
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
Bitte warten ..
Mitglied: cykes
22.05.2007 um 20:14 Uhr
@bastla Danke für die Korrektur/Ergänzung
Hab mich vorhin nur mal ein bisschen damit auseinandergesetzt, war son Schnellschuss
Bitte warten ..
Mitglied: Biber
22.05.2007 um 21:31 Uhr
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
01.
        STATE              : 4  RUNNING 
02.
-oder- 
03.
        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:
01.
@echo off & setlocal 
02.
set Status=NichDa 
03.
for /f "tokens=4  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b 
04.
echo [Debug] Status: %Status% 
05.
if /i "%Status%" == "STOPPED" net start %dienst% 
06.
if /i "%Status%" == "NichDa" (  
07.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
08.
      pause 
09.
)
[ungetestete Skizze]
Ginge natürlich noch kürzer, aber so ist es noch ganz übersichtlich und wartbar.

Gruss
Biber
Bitte warten ..
Mitglied: cykes
23.05.2007 um 10:46 Uhr
Biber hat mal wieder die schönste Lösung
Bitte warten ..
Mitglied: admin1987
23.05.2007 um 10:53 Uhr
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ß
Bitte warten ..
Mitglied: cykes
23.05.2007 um 11:01 Uhr
Ui, Biber hat ein kleinen Tippfehler gemacht

Die Zeile:

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

01.
for /f "tokens=4"  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b
Probier das mal aus...

Gruß

cykes
Bitte warten ..
Mitglied: admin1987
23.05.2007 um 11:06 Uhr
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
Bitte warten ..
Mitglied: cykes
23.05.2007 um 11:13 Uhr
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):

01.
@echo off & setlocal 
02.
set Status=NichDa 
03.
for /f "tokens=4"  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b 
04.
echo [Debug] Status: %Status% 
05.
if /i "%Status%" == "STOPPED" net start %dienst% 
06.
if /i "%Status%" == "NichDa" (  
07.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
08.
      pause 
09.
)
Bitte warten ..
Mitglied: admin1987
23.05.2007 um 11:34 Uhr
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
Bitte warten ..
Mitglied: cykes
23.05.2007 um 11:43 Uhr
Was lange währt ...

Könntest Du abschliessend den Beitrag noch als gelöst markieren?
Bitte warten ..
Mitglied: admin1987
23.05.2007 um 11:50 Uhr
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.


01.
@echo off & setlocal 
02.
 
03.
 
04.
ECHO SMTP-Dienst checken 
05.
set Status=NichDa 
06.
for /f "tokens=4"  %%b in ('sc query SMTPSVC ^|find "STATE "') do set Status=%%b 
07.
echo [Debug] Status: %Status% 
08.
if /i "%Status%" == "STOPPED" net start SMTPSVC 
09.
if /i "%Status%" == "NichDa" (  
10.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
11.
       
12.
13.
 
14.
 
15.
ECHO IMAP-Dienst checken 
16.
set Status=NichDa 
17.
for /f "tokens=4"  %%b in ('sc query IMAP4Svc ^|find "STATE "') do set Status=%%b 
18.
echo [Debug] Status: %Status% 
19.
if /i "%Status%" == "STOPPED" net start IMAP4Svc 
20.
if /i "%Status%" == "NichDa" (  
21.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
22.
       
23.
24.
 
25.
ECHO MTA-Dienst checken 
26.
set Status=NichDa 
27.
for /f "tokens=4"  %%b in ('sc query MSExchangeMTA ^|find "STATE "') do set Status=%%b 
28.
echo [Debug] Status: %Status% 
29.
if /i "%Status%" == "STOPPED" net start MSExchangeMTA 
30.
if /i "%Status%" == "NichDa" (  
31.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
32.
       
33.
34.
 
35.
ECHO Pop3-Dienst checken 
36.
set Status=NichDa 
37.
for /f "tokens=4"  %%b in ('sc query POP3Svc ^|find "STATE "') do set Status=%%b 
38.
echo [Debug] Status: %Status% 
39.
if /i "%Status%" == "STOPPED" net start POP3Svc 
40.
if /i "%Status%" == "NichDa" (  
41.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
42.
       
43.
44.
 
45.
 
46.
ECHO Exchange-Ereignis-Dienst checken 
47.
set Status=NichDa 
48.
for /f "tokens=4"  %%b in ('sc query MSExchangeES ^|find "STATE "') do set Status=%%b 
49.
echo [Debug] Status: %Status% 
50.
if /i "%Status%" == "STOPPED" net start MSExchangeES 
51.
if /i "%Status%" == "NichDa" (  
52.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
53.
       
54.
55.
 
56.
 
57.
ECHO Exchange-Informationsspeicher-Dienst checken 
58.
set Status=NichDa 
59.
for /f "tokens=4"  %%b in ('sc query MSExchangeIS ^|find "STATE "') do set Status=%%b 
60.
echo [Debug] Status: %Status% 
61.
if /i "%Status%" == "STOPPED" net start MSExchangeIS 
62.
if /i "%Status%" == "NichDa" (  
63.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
64.
       
65.
66.
 
67.
 
68.
ECHO Exchange-Routungs-Dienst checken 
69.
set Status=NichDa 
70.
for /f "tokens=4"  %%b in ('sc query RESvc ^|find "STATE "') do set Status=%%b 
71.
echo [Debug] Status: %Status% 
72.
if /i "%Status%" == "STOPPED" net start RESvc 
73.
if /i "%Status%" == "NichDa" (  
74.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
75.
       
76.
77.
 
78.
 
79.
ECHO Exchange-Standort-Replikationsdienst-Dienst checken 
80.
set Status=NichDa 
81.
for /f "tokens=4"  %%b in ('sc query MSExchangeSRS ^|find "STATE "') do set Status=%%b 
82.
echo [Debug] Status: %Status% 
83.
if /i "%Status%" == "STOPPED" net start MSExchangeSRS 
84.
if /i "%Status%" == "NichDa" (  
85.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
86.
       
87.
88.
 
89.
ECHO Exchange-Systemaufsichts-Dienst checken 
90.
set Status=NichDa 
91.
for /f "tokens=4"  %%b in ('sc query MSExchangeSA ^|find "STATE "') do set Status=%%b 
92.
echo [Debug] Status: %Status% 
93.
if /i "%Status%" == "STOPPED" net start MSExchangeSA 
94.
if /i "%Status%" == "NichDa" (  
95.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
96.
       
97.
98.
 
99.
ECHO Exchange-Verwaltungs-Dienst checken 
100.
set Status=NichDa 
101.
for /f "tokens=4"  %%b in ('sc query MSExchangeMGMT ^|find "STATE "') do set Status=%%b 
102.
echo [Debug] Status: %Status% 
103.
if /i "%Status%" == "STOPPED" net start MSExchangeMGMT 
104.
if /i "%Status%" == "NichDa" (  
105.
      echo Irgendetwas Unerwartetes ist passiert...hol mal den Admin.. 
106.
       
107.
108.
 



lg
[Edit Biber] Auf <code> formatiert. [/Edit]
Bitte warten ..
Mitglied: Biber
23.05.2007 um 21:01 Uhr
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:
01.
::----------snipp SvcStarter.bat ----------:: 
02.
:: Placed in the Public Domain Biber 2007 
03.
@echo off & setlocal 
04.
Set "Suchstr=DisplayName" 
05.
Set "SuchStr=%suchstr%:ServiceKeyname" 
06.
goto :skipSomeLines 
07.
----ab hier können alle Dienste nach dem skizzierten Muster eingetragen werden... 
08.
DisplayName:ServiceKeyname=SMTP-Dienst:SMTPSvc 
09.
DisplayName:ServiceKeyname=IMAP-Dienst:IMAP4Svc 
10.
DisplayName:ServiceKeyname=MTA-Dienst:MSExchangeMTA 
11.
DisplayName:ServiceKeyname=Pop3-Dienst:POP3Svc 
12.
DisplayName:ServiceKeyname=Exchange-Ereignis-Dienst:MSExchangeES 
13.
DisplayName:ServiceKeyname=Exchange-Informationsspeicher-Dienst:MSExchangeIS 
14.
DisplayName:ServiceKeyname=Exchange-Routungs-Dienst:RESvc 
15.
DisplayName:ServiceKeyname=Exchange-Standort-Replikationsdienst-Dienst:MSExchangeSRS 
16.
DisplayName:ServiceKeyname=Exchange-Systemaufsichts-Dienst:MSExchangeSA 
17.
DisplayName:ServiceKeyname=Exchange-Verwaltungs-Dienst:MSExchangeMGMT 
18.
----bis hier können alle Dienste nach dem skizzierten Muster eingetragen werden... 
19.
:SkipSomeLines 
20.
for /f "tokens=3,4 delims=:=" %%i in ('findstr /i /C:"%SuchStr%" %0') do ( 
21.
       call :CheckSvc %%i %%j 
22.
23.
goto :eof 
24.
 
25.
:CheckSvc Param1=DisplayName Param2=ServiceKeyname 
26.
ECHO %1 checken 
27.
set Status=NichDa 
28.
for /f "tokens=4"  %%b in ('sc query %2 ^|find "STATE "') do set Status=%%b 
29.
if /i "%Status%" == "NichDa" (  
30.
      echo [Fehler] %2 [%1] nicht gefunden...hol mal den Admin.. 
31.
) ELSE ( 
32.
echo [Debug] Status von %1 [%2]: %Status% 
33.
if /i "%Status%" == "STOPPED" net start %2       
34.
35.
goto :eof 
36.
::----------snapp SvcStarter.bat -----------::
[Ungetestete Skizze]

Grüße
Biber
...und THX @cykes für die Tippfehlerkorrektur
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Windows Update Dienst per Batch beenden (12)

Frage von Justin98 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mit Batchdatei Informationen auslesen und diese strukturiert in Excel ausgeben (9)

Frage von Flodsche zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...