Windows-Dienst remote neu starten mit sc.exe oder Powershell

    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.

    Während unter älteren Windows-Versionen noch net start [service] und net stop [service] die gängigen Tools für das Starten und Beenden eines Diensten waren, steht inzwischen mit sc.exe ein mächtigeres Werkzeug zur Verfügung. Es bietet zahlreiche Möglichkeiten zur Steuerung von Windows-Services, darunter auch solche zum Auflisten, Starten, Fortsetzen und Beenden. 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

    Im Gegensatz zu sc.exe verfügt die Powershell über die Möglichkeit, einen Windows-Dienst mit einem einzigen Befehl neu zu starten, und zwar über das Cmdlet restart-service. Wenn man den Namen des Dienstes kennt, lautet der Aufruf für die lokale Maschine

    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.

    Keine Kommentare