Tags: PowerShell, WMI
Zur Fernwartung von Computern gehört, dass man sie bei Bedarf remote neu starten oder herunterfahren kann. Windows bietet dafür eigene Bordmittel an, darüber hinaus existieren externe Tools für diesen Zweck. Die Powershell-Cmdlets Restart-Computer und Stop-Computer sind nicht nur innerhalb von Scripts die bevorzugten Mittel, sondern bieten auch auf der Kommandozeile einige interessante Optionen.
Das Windows-eigene Kommandozeilen-Tool für das Herunterfahren (Schalter /s) oder Neustarten (/r) eines lokalen oder entfernten Computers ist shutdown.exe. Es wird auch häufig in einer Remotedesktop-Session verwendet, weil dort im Startmenü des Hosts die Optionen Neu starten und Herunterfahren ausgeblendet sind. Ein Alternative zu shutdown.exe mit erweiterten Möglichkeiten ist PsShutdown von SysInternals.
Cmdlets integrieren sich besser in Scripts
Innerhalb von Powershell-Scripts ist es von Vorteil, wenn man statt externer Programme die dafür vorgesehen Cmdlets verwendet, weil sie leichter mit anderen Befehlen verkettet werden können. Auf diese Weise lassen sich etwa die Anmeldedaten als Credential-Objekt übergeben oder die Ausgabe des Kommandos in einer Schleife bearbeiten, wenn mehrere Computer gleichzeitig remote heruntergefahren oder neu gestartet werden sollen.
Im Gegensatz zu den beiden genannten Kommandozeilen-Tools sind in Powershell 2 separate Cmdlets für den Reboot und das Herunterfahren zuständig, nämlich Restart-Computer und Stop-Computer. Die Verwendung der beiden Befehle ist jedoch weitgehend identisch, sie erwarten die gleichen Argumente.
Mehrere PCs auf einmal neu starten
Über den Parameter -Computer teilt man mit, auf welche Computer die Aktion angewandt werden soll. Dabei ist neben einem einzelnen Namen die Übergabe einer durch Kommata getrennten Liste möglich. Ist der entfernte Rechner Mitglied der Domäne und der angemeldete Benutzer hat administrative Rechte, dann müssen dem Aufruf keine Anmeldedaten mitgegeben werden.
Um ein anderes Konto zu verwenden, ist der Parameter -Credential zuständig. Übergibt man ihm nur einen Benutzernamen, dann fragen die Cmdlets interaktiv nach dem Passwort. Ein Aufruf für den Reboot könnte so aussehen:
restart-computer -ComputerName remotePC-1, remotePC-2 -Credential uName
Herunterfahren erzwingen
Um sich anzeigen zu lassen, was Powershell beim tatsächlichen Aufruf des Kommandos ausführen würde, kann man die Cmdlets mit dem Schalter -whatif starten. Gibt man nur einen der beiden Befehle ein, ist diese Simulation nicht besonders ergiebig, nützlich ist sie aber vor allem dann, wenn der Input über eine Pipe an eines der beiden Cmdlets gelangt. Ist am Remote-PC ein Benutzer abgemeldet, dann verweigert dieser den Neustart. Mit dem Schalter -force kann man ihn jedoch erzwingen.
Die beiden Cmdlets steuern wie die meisten Tools für diesen Zweck den entfernten Rechner über WMI. Daher muss dort das Remote-Management über WMI aktiviert worden sein. Bei Servern ist das zumeist ohnehin der Fall und bei Clients besteht in der Regel weniger Bedarf, sie remote neu zu starten oder herunterzufahren.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- BitLocker aktivieren mit manage-bde, PowerShell oder WMI
- Programme (remote) mit PowerShell deinstallieren
- Get-ComputerInfo: Systeminformationen auslesen mit PowerShell
- Installationsvarianten (Nano, Core, Desktop) und Editionen von Windows Server erkennen
- Get-CimClass: WMI-Klassen finden in PowerShell
Weitere Links
1 Kommentar
Ist das Utility psshutdown von Sysinternals noch kompatibel zu Server 2008 (R2), also um 2008er-Server remote zu beenden? Ist ja noch von 2006 und in vielen Foren werden Probleme beschrieben.
Danke und Gruß, Jürgen