Restart per SC.EXE


Muss man eine Anwendung, die als Windows-Service läuft, neu starten, dann geht das relativ unkompliziert über die entsprechende GUI-Anwendung im Startmenü unter Verwaltung => Dienste (bzw. über services.msc im direkten Aufruf).

Dies funktioniert auch remote, wenn man sich über das Menü Aktion mit einem anderen Computer verbindet. Will man diesen Vorgang jedoch auf mehreren Rechnern ausführen oder in einem Script anstoßen, dann hilft das Kommandozeilen-Tool sc.exe oder Powershell.


Mit sc query|find /i "Service_name" kann man sich die Namen aller aktiven Dienste auf dem lokalen Rechner anzeigen lassen, die man dann mit den Schaltern start, pause, continue und stop steuern kann. Einen Befehl für den Neustart gibt es nicht, für diesen Zweck muss man stop und start kombinieren. Möchte man diese Befehle auf einem entfernten Rechner ausführen, dann gibt man dessen Namen als ersten Parameter in UNC-Syntax an:

sc \\remotePC stop "Service_name"


Cmdlet restart-service in Powershell


restart-service "Service_name"

Das Cmdlet produziert eine Fehlermeldung, wenn man versucht, einen Service neu zu starten, von dem weitere Services abhängen. Man kann dann entweder mit dem Parameter -force einen Neustart erzwingen oder mit

get-service "Service_name " -DependentServices

nachsehen, welche Dienste vom besagten Service abhängen und ob man wirklich den Neustart um jeden Preis haben möchte.


Dienst remote neu starten mit Powershell


Um einen Windows-Dienst remote neu zu starten, muss man den Weg über invoke-command gehen:


invoke-command {restart-service "Service_Name"} -computer Remote_Computer


Dem Argument -computer kann man bei Bedarf eine Liste von Hostnamen übergeben, die durch Kommata voneinander getrennt sein müssen.

Voraussetzung für alle Formen der Remote-Steuerung von Diensten ist natürlich, dass der aktuelle Benutzer ausreichende Rechte besitzt und dass WinRM am entfernten Rechner aktiviert ist.