Ich möchte eine Batchdatei schreiben, die die folgenden Vorgänge ausführt:
- Überprüfen Sie, ob ein Dienst ausgeführt wird
- Wenn es ausgeführt wird, beenden Sie den Stapel
- Wenn es nicht ausgeführt wird, starten Sie den Dienst
Die Codebeispiele, die ich bisher gegoogelt habe, haben sich als nicht funktionierend erwiesen, daher habe ich beschlossen, sie nicht zu veröffentlichen.
Das Starten eines Dienstes erfolgt durch:
net start "SERVICENAME"
- Wie kann ich überprüfen, ob ein Dienst ausgeführt wird, und wie kann ich eine if-Anweisung in einer Batchdatei erstellen?
- Ich bin ein bisschen verwirrt. Was ist das Argument, das ich an den Netzstart weitergeben muss? Der Dienstname oder sein Anzeigename?
Antworten:
Verwenden Sie, um den Status eines Dienstes zu überprüfen
sc query <SERVICE_NAME>
. Überprüfen Sie die Dokumentation auf Blockierungen in Batchdateien .Der folgende Code überprüft den Status des Dienstes
MyServiceName
und startet ihn, wenn er nicht ausgeführt wird (der if-Block wird ausgeführt, wenn der Dienst nicht ausgeführt wird):Erklärung dessen, was es tut:
Bei Ihrer zweiten Frage ist das Argument, an das Sie übergeben möchten,
net start
der Dienstname und nicht der Anzeigename.quelle
sc query "SCardSvr"
über eine Befehlszeile ausgeführt werden?Verwenden Sie Folgendes, um einen Dienst umzuschalten:
quelle
||
ist eigentlich einOR
Operator, obwohl es in diesem Fall funktional eineELSE
Aussage ist. Dies ist ein subtiler, aber wichtiger Unterschied. Ich habe immer noch meine +1 - ich mache das die ganze Zeit in Unix / Linux-Shell-Skripten. Ich weiß nicht, warum ich nie daran gedacht habe, dies im Windows-Batch zu tun.Mit dem folgenden Befehl können Sie feststellen, ob ein Dienst ausgeführt wird oder nicht:
Wenn ich es für mein NOD32-Antivirus ausführe, erhalte ich:
Wenn es gestoppt würde, würde ich bekommen:
Sie können dies in einer Variablen verwenden, um dann zu bestimmen, ob Sie NET START verwenden oder nicht.
Der Dienstname sollte der Dienstname sein, nicht der Anzeigename.
quelle
Das sollte es tun:
quelle
Sprachunabhängige Version.
quelle
Set ServiceName=Jenkins
mitSet ServiceName=%~1
und nennen Sie es wiewatch-service.bat "Jenkins"
Ich habe gerade diesen Thread gefunden und wollte ihn zur Diskussion hinzufügen, wenn die Person keine Batchdatei zum Neustarten von Diensten verwenden möchte. In Windows gibt es eine Option, wenn Sie zu Dienste, Diensteigenschaften und dann zur Wiederherstellung wechseln. Hier können Sie Parameter für den Dienst einstellen. Möchten Sie den Dienst neu starten, wenn der Dienst beendet wird. Sie können auch einen zweiten Fehlerversuch ausführen lassen, der etwas anderes als beim Neustart des Computers ausführt.
quelle
Cuando se use Windows en Español, el código debe quedar asi (bei Verwendung von Windows auf Spanisch lautet der Code):
Reemplazar MYSERVICE con el nombre del servicio que se desea procesar. Puedes ver el nombre del servicio viendo las propiedades del servicio. (Ersetzen Sie MYSERVICE durch den Namen des zu verarbeitenden Dienstes. Den Namen des Dienstes finden Sie in den Diensteigenschaften.)
quelle
quelle
Für Windows Server 2012 hat das unten für mich funktioniert. Ersetzen Sie nur "SERVICENAME" durch den tatsächlichen Servicenamen:
quelle
Ich wollte auch eine E-Mail senden, wenn der Dienst auf diese Weise gestartet wurde, also fügte ich ein bisschen zum @ IC-Code hinzu, dachte nur, ich würde es posten, falls es jemandem helfen sollte. Ich habe SendMail verwendet, aber es gibt andere Befehlszeilenoptionen. Wie sende ich eine einfache E-Mail aus einer Windows-Batchdatei?
quelle
Starten des Dienstes mit dem Powershell-Skript. Sie können dies mit dem Taskplaner verknüpfen und in Intervallen oder nach Bedarf auslösen. Erstellen Sie diese Datei als PS1-Datei, dh als Datei mit der Erweiterung PS1, und lassen Sie diese Datei vom Taskplaner aus auslösen.
So starten Sie den Dienst
Wenn Sie es im Taskplaner auf dem Server verwenden, verwenden Sie dies in Argumenten
-noprofile -executionpolicy bypass -file "C: \ Service Restart Scripts \ StopService.PS1"
Überprüfen Sie dies, indem Sie dasselbe auf cmd ausführen, wenn es funktioniert. Es sollte auch auf dem Taskplaner funktionieren
quelle
quelle
Im Zusammenhang mit der Antwort von @DanielSerrano wurde ich kürzlich von der Lokalisierung des
sc.exe
Befehls gebissen, und zwar auf Spanisch. Mein Vorschlag ist, die Zeile und das Token, die den numerischen Dienststatus enthalten, genau zu bestimmen und zu interpretieren, was viel robuster sein sollte:Getestet mit:
quelle
Vielleicht ein viel einfacherer Weg? Fügen Sie hier einfach die Liste der Antworten hinzu:
quelle