Exchange per Script mit if und else für Backup stoppen und wieder starten
Folgende Situation,
auf einem Exchange-Server läuft zum erstellen der Backups Acronis True Image Enterprise Server.
Im Moment sind von den Vor- / Nachbefehlen her 2 winzige Scripts mit eingebettet, um die Datenbank stillzulegen während das Backup läuft.
NetStop.bat
/
net stop "POP3 Connector für Windows"
net stop "Exchange Informationsspeicher"
/
Mein NetStart.bat ist demnach fast das gleiche, nur in umgekehrter Reihenfolge.
Was ich allerdings noch hinterlegen will ist eine Abfrage um zu testen ob der Dienst bereits schon im voraus gestoppt / gestartet wurde.
Im Endeffekt sollte es dann so aussehen:
/
Wenn "POP3 Connector für Windows" schon gestoppt
dann überspringe net stop "POP3 Connector für Windows"
ansonsten net stop "POP3 Connector für Windows"
Wenn "Exchange Informationsspeicher" schon gestoppt
dann überspringe net stop "Exchange Informationsspeicher"
ansonsten net stop "Exchange Informationsspeicher"
/
Wäre super wenn mir jemand von der Syntax her behilflich sein könnte.
auf einem Exchange-Server läuft zum erstellen der Backups Acronis True Image Enterprise Server.
Im Moment sind von den Vor- / Nachbefehlen her 2 winzige Scripts mit eingebettet, um die Datenbank stillzulegen während das Backup läuft.
NetStop.bat
/
net stop "POP3 Connector für Windows"
net stop "Exchange Informationsspeicher"
/
Mein NetStart.bat ist demnach fast das gleiche, nur in umgekehrter Reihenfolge.
Was ich allerdings noch hinterlegen will ist eine Abfrage um zu testen ob der Dienst bereits schon im voraus gestoppt / gestartet wurde.
Im Endeffekt sollte es dann so aussehen:
/
Wenn "POP3 Connector für Windows" schon gestoppt
dann überspringe net stop "POP3 Connector für Windows"
ansonsten net stop "POP3 Connector für Windows"
Wenn "Exchange Informationsspeicher" schon gestoppt
dann überspringe net stop "Exchange Informationsspeicher"
ansonsten net stop "Exchange Informationsspeicher"
/
Wäre super wenn mir jemand von der Syntax her behilflich sein könnte.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 59554
Url: https://administrator.de/contentid/59554
Ausgedruckt am: 08.11.2024 um 13:11 Uhr
6 Kommentare
Neuester Kommentar
http://de.wikibooks.org/wiki/Batch-Programmierung:_Beispiele
schau da mal unter "TaskList-Abfrage"
ansonsten vielleicht irgendwie per Errorlabfrage oder so:
net start "Dienstname" 2> net start "Dienstname"
schau da mal unter "TaskList-Abfrage"
ansonsten vielleicht irgendwie per Errorlabfrage oder so:
net start "Dienstname" 2> net start "Dienstname"
Hallo -Jarik- und willkommen im Forum!
Vielleicht entsteht im Beitrag Batchdatei prüft ob Dienst gestartet ist auch etwas für Dich Nützliches ...
Grüße
bastla
Vielleicht entsteht im Beitrag Batchdatei prüft ob Dienst gestartet ist auch etwas für Dich Nützliches ...
Grüße
bastla
Hallo -Jarik-!
Zunächst nochmals der Hinweis auf den oben genannten Beitrag - dort findest Du einige (neue) Ansätze, wie es noch einfacher gehen könnte ...
Falls Du trotzdem bei Deiner Lösung bleiben willst, könntest Du es so versuchen:
Kurze Erklärung zu den Änderungen:
Wenn der "SERVICE_NAME" des Dienstes Leerzeichen enthält, wurde bisher nur der erste Namensbestandteil verwendet (Token 6; die weiteren bekamen die "Token-Nummern" 7, 8, ...). Durch die Änderung auf "tokens=5*" wird alles nach dem 5. Bestandteil der Zeile als Einheit betrachtet, muss aber als %%b angesprochen werden (%%a ist jetzt Token 5).
Die REM-Zeile beschreibt jetzt, was die weiteren Zeilen bewirken sollen.
Das Setzen der Variable %status% auf "UNBEKANNT" entspricht ebenfalls eher der weiteren Vorgangsweise, da genau genommen nur geprüft wird, ob der Status "RUNNING" ist. Der Umkehrschluss, dass der Status "STOPPED" sein muss, wenn er nicht "RUNNING" ist, ist nicht unbedingt zulässig (abgesehen von "PAUSED" könnte der Status vielleicht auch gar nicht feststellbar sein ...). Da in weiterer Folge aber (derzeit) ohnehin nur auf "RUNNING" geprüft wird, stellt die von mir vorgenommene Änderung eigentlich nur eine Vorleistung auf eine mögliche Erweiterung der Batchdatei dar.
Grüße
bastla
Zunächst nochmals der Hinweis auf den oben genannten Beitrag - dort findest Du einige (neue) Ansätze, wie es noch einfacher gehen könnte ...
Falls Du trotzdem bei Deiner Lösung bleiben willst, könntest Du es so versuchen:
@echo off & setlocal
REM Pruefen und bei Status "gestartet" stoppen von: Microsoft Connector for POP3 Mailboxes
set status=UNBEKANNT
for /f "tokens=5* delims= " %%a in ('sc getkeyname "Microsoft Connector for POP3 Mailboxes"') do set "dienst=%%b"
echo Dienst: %dienst%
for /f "tokens=3 skip=3 delims=: " %%b in ('sc query %dienst%') do if /i "%%b" == "RUNNING" set status=%%b
echo Status: %status%
if /i %status% == RUNNING net stop %"dienst"%
Wenn der "SERVICE_NAME" des Dienstes Leerzeichen enthält, wurde bisher nur der erste Namensbestandteil verwendet (Token 6; die weiteren bekamen die "Token-Nummern" 7, 8, ...). Durch die Änderung auf "tokens=5*" wird alles nach dem 5. Bestandteil der Zeile als Einheit betrachtet, muss aber als %%b angesprochen werden (%%a ist jetzt Token 5).
Die REM-Zeile beschreibt jetzt, was die weiteren Zeilen bewirken sollen.
Das Setzen der Variable %status% auf "UNBEKANNT" entspricht ebenfalls eher der weiteren Vorgangsweise, da genau genommen nur geprüft wird, ob der Status "RUNNING" ist. Der Umkehrschluss, dass der Status "STOPPED" sein muss, wenn er nicht "RUNNING" ist, ist nicht unbedingt zulässig (abgesehen von "PAUSED" könnte der Status vielleicht auch gar nicht feststellbar sein ...). Da in weiterer Folge aber (derzeit) ohnehin nur auf "RUNNING" geprüft wird, stellt die von mir vorgenommene Änderung eigentlich nur eine Vorleistung auf eine mögliche Erweiterung der Batchdatei dar.
Grüße
bastla