Tags: PowerShell, Remote-Verwaltung, Troubleshooting
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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- PowerShell-Remoting, Hyper-V Manager: Fehler wegen Netzwerkverbindungstyp "Öffentlich"
- WinRM (Hyper-V Manager, PowerShell-Remoting) für Standardbenutzer zulassen
- ThinPrint 13 unterstützt Microsofts V4-Druckertreiber und MMC
- Resolve-DnsName: nslookup für PowerShell
- Windows-Sicherheit öffnet sich nicht: Store-App mit PowerShell zurücksetzen
Weitere Links