Wie kann ich ein Fledermaus- oder Cmd-Skript erstellen, um einen Dienst mit Fehlerprüfung zuverlässig zu stoppen und zu starten (oder mich wissen lassen, dass er aus irgendeinem Grund nicht erfolgreich war)?
288
Wie kann ich ein Fledermaus- oder Cmd-Skript erstellen, um einen Dienst mit Fehlerprüfung zuverlässig zu stoppen und zu starten (oder mich wissen lassen, dass er aus irgendeinem Grund nicht erfolgreich war)?
Antworten:
Verwenden Sie den
SC
Befehl (Service Control). Er bietet Ihnen viel mehr Optionen als nurstart
&stop
.quelle
und
Sagen Sie, ob sie erfolgreich waren oder nicht. Beispielsweise
Wenn Sie von einer Batch-Datei aus ausführen, haben Sie Zugriff auf das ERRORLEVEL des Rückkehrcodes. 0 zeigt Erfolg an. Alles, was höher ist, weist auf einen Fehler hin.
Als Fledermausdatei
error.bat
:Die Ausgabe sieht folgendermaßen aus:
Rückkehrcodes
Bearbeiten 20.04.2015
Rückkehrcodes:
Schauen Sie hier: http://ss64.com/nt/net_service.html
quelle
NET
ist nicht nur für die Funktionen Service bezogen , währendSC
ist nur für Service - bezogene Funktionen.errorlevel
2 zurückgegeben wird, erfahren Sie hier, wie Sie das Fehlerergebnis interpretieren .Sie können den Befehl NET START verwenden und dann die Umgebungsvariable ERRORLEVEL überprüfen, z
Haftungsausschluss: Ich habe dies von oben geschrieben, aber ich denke, es wird funktionieren.
quelle
Anstatt Codes zu überprüfen, funktioniert dies auch
quelle
Ich habe meine persönliche Batch-Datei dafür erstellt. Meine ist etwas anders, kann aber nach Belieben geändert werden. Ich habe dies vor einiger Zeit erstellt, weil ich gelangweilt war und den Menschen eine einfache Möglichkeit bieten wollte, das Beenden, Starten, Stoppen oder die Einstellung auf Auto einzugeben. Diese BAT-Datei fordert Sie lediglich auf, den Dienstnamen einzugeben, und erledigt den Rest für Sie. Ich wusste nicht, dass er nach etwas suchte, das einen Fehler anzeigte, ich muss diesen Teil falsch verstanden haben. Dies kann jedoch normalerweise durch Eingabe von >> output.txt am Ende der Zeile erfolgen.
% Var% ist nur eine Möglichkeit für den Benutzer, seinen eigenen Dienst in diesen einzugeben, anstatt die Bat-Datei jedes Mal ändern zu müssen, wenn Sie einen anderen Dienst starten / stoppen möchten.
Wenn ich falsch liege, kann sich jeder frei fühlen, mich diesbezüglich zu korrigieren.
quelle
Die Verwendung der Rückkehrcodes von
net start
undnet stop
scheint mir die beste Methode zu sein. Schauen Sie sich das an: Net Start-Rückkehrcodes .quelle
Syntax bringt mich immer ... also ...
Hier erfahren Sie explizit, wie Sie einer Batchdatei eine Zeile hinzufügen, die einen Remotedienst (auf einem anderen Computer) beendet, wenn Sie auf beiden Computern Administrator sind, die .bat-Datei als Administrator ausführen und sich die Computer in derselben Domäne befinden. Der Computername folgt dem UNC-Format \ myserver
In diesem Fall ... war p4_1 sowohl der Dienstname als auch der Anzeigename, wenn Sie die Eigenschaften für den Dienst in Service Manager anzeigen. Sie müssen den Dienstnamen verwenden.
Für Ihre Service Ops-Junkies ... fügen Sie unbedingt Ihren Ursachencode und Kommentar hinzu! dh '4', was 'Geplant' entspricht, und Kommentar 'Server für Wartung stoppen'
quelle
CMD
als anderer Benutzer / andere ID ausgeführt, indem Sierunas /user:Domain\UserName cmd
Ihr Kennwort eingeben. CMD wird als angegebenes Benutzerkonto ausgeführt.Wir würden gerne glauben, dass "net stop" den Dienst stoppen wird. Leider ist die Realität nicht so schwarz und weiß. Wenn das Beenden des Dienstes lange dauert, wird der Befehl zurückgegeben, bevor der Dienst beendet wurde. Sie werden es jedoch nicht wissen, es sei denn, Sie überprüfen die Fehlerstufe.
Die Lösung scheint darin zu bestehen, nach dem Status des Dienstes zu suchen, bis dieser gestoppt wird, wobei jedes Mal eine Pause eingelegt wird.
Aber dann wieder...
Ich sehe, dass das Beenden des ersten Dienstes lange dauert, dann scheint der "Netzstopp" für einen nachfolgenden Dienst einfach nichts zu bewirken. Sehen Sie sich den Dienst im Dienstmanager an, und sein Status ist immer noch "Gestartet" - keine Änderung in "Stoppen". Ich kann diesen zweiten Dienst jedoch manuell mit dem SCM beenden und er wird in 3 oder 4 Sekunden beendet.
quelle
oder Sie können den Remote-Dienst mit diesem Cmd starten:
sc \\<computer> start <service>
quelle
Ich habe gerade das obige Beispiel von Jonas verwendet und eine vollständige Liste mit 0 bis 24 Fehlerstufen erstellt. Andere Beiträge sind korrekt
net start
und verwendennet stop
nurerrorlevel
0 für Erfolg und 2 für Misserfolg.Aber das hat bei mir funktioniert:
Wechseln Sie
stop
zustart
und funktioniert umgekehrt.quelle
Der manuelle Neustart des Dienstes ist in Ordnung - services.msc hat die Schaltfläche "Neustart", aber in der Befehlszeile fehlt sowohl den Befehlen sc als auch net der Schalter "Neustart". Wenn ein Neustart in der cmd / bat-Datei geplant ist, wird der Dienst sofort gestoppt und gestartet, manchmal auch Es wird eine Fehlermeldung angezeigt, da der Dienst noch nicht gestoppt wurde. Das Herunterfahren dauert einige Zeit.
Dies kann zu einem Fehler führen: sc stop sc start
Es ist eine gute Idee, ein Timeout einzufügen. Ich verwende Ping (es pingt alle 1 Sekunde): sc stop ping localhost -n 60 sc start
quelle
Hier ist der Windows 10-Befehl zum Starten der Systemwiederherstellung mithilfe eines Stapels:
Diese Befehle können Ihnen auch gefallen:
Ändern Sie den Registrierungswert so, dass die Systemwiederherstellung automatisch gestartet wird
REG ADD "HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ SystemRestore" / v DisableSR / t REG_DWORD / d 0 / f
Erstellen Sie einen Systemwiederherstellungspunkt
Wmic.exe / Namespace: \ root \ default Path SystemRestore Rufen Sie CreateRestorePoint "djibe saved your PC" auf, 100, 12
Ändern der Systemwiederherstellung
vssadmin resize shadowstorage / for = C: / on = C: / maxsize = 10%
Genießen
quelle
SC
kann alles mit Diensten machen ... starten, stoppen, prüfen, konfigurieren und mehr ...quelle
Manchmal kann man feststellen, dass der Stopp nicht funktioniert.
Mein SQlServer macht das manchmal. Die Verwendung der folgenden Befehlszeile beendet es. Wenn Sie Ihr Skript wirklich wirklich brauchen, um Dinge zu töten, die nicht aufhören. Ich würde es als letzten Ausweg tun lassen
quelle
Ich schreibe einen Windows-Dienst in C #, die Schleife zum Stoppen / Deinstallieren / Erstellen / Installieren / Starten wurde zu anstrengend. Schrieb ein Miniskript, nannte es
reploy.bat
und legte es in meinem Visual Studio-Ausgabeverzeichnis ab (eines, in dem der erstellte Dienst ausführbar ist), um die Schleife zu automatisieren.Stellen Sie einfach diese 3 Vars ein
servicename
: Dies wird in der Windows-Systemsteuerung (services.msc) angezeigt.slndir
: Ordner (nicht der vollständige Pfad) mit Ihrer Lösungsdatei (.sln)binpath
: vollständiger Pfad (nicht der Ordnerpfad) zur ausführbaren Dienstdatei aus dem BuildANMERKUNG: Dies muss über die Visual Studio Developer-Befehlszeile ausgeführt werden, damit der
msbuild
Befehl funktioniert.Vielleicht hilft das jemandem :)
quelle