Wer in einer Terminal Session eine Client-Betriebssystems (wie beispielsweise Windows 7 oder XP) den Client herunterfahren möchte, wird feststellen, dass standardmäßig nur Abmelden, Trennen und Sperren zur Auswahl stehen. 

Serverbetriebssysteme können sich da anders verhalten, je nach Berechtigung und Konfiguration. (Das soll in diesem Fall außer Acht gelassen werden) Welche Möglichkeiten bestehen aber ein Client-Betriebssystem trotzdem herunterzufahren. Eine Möglichkeit wäre natürlich über den Hypervisor (zB Hyper-V …). Dafür müsste man sich – in den meisten Fällen – erstmal remote auf dem Hyper-V Server einloggen, um dann von dort den Client herunterzufahren. Ein nicht gerade praktikabler Weg.

Möglichkeit 1: shutdown-Befehl

Die erste Möglichkeit, die einem in den Sinn kommen könnte, um das Problem zu lösen ist der Shutdown Befehl:

Dies kann man einerseits lokal auf dem Rechner ausführen, auf dem man sich remote befindet:

  • shutdown /r /t 0 (um den Rechner neu zu starten)
  • shutdown /s /t 0 (um den Rechner herunterzufahren)

Dazu kann man sich beispielsweise eine Batch-Datei erstellen (siehe Anhang „Herunterfahren.zip“)

Eine zweite Möglichkeit wäre es den Computer dem Computer, von dem man aus die Remote Session aufgebaut hat, herunterzufahren. Also die virutelle Maschine remote herunterfahren.

  • shutdown /m <Computername> /r /t 0 (um den Rechner neu zu starten)
  • shutdown /m <Computername> /s /t 0 (um den Rechner herunterzufahren)

Das wird jedoch ohne weitere Einstellung nicht funktionieren. Grund dafür ist, dass der Benutzer, der den Befehl ausführt nicht genügend Rechte für einen Remote Shutdown hat. Daher sind folgende Einstellungen vorzunehmen:

  • Starten Sie den Editor für die lokalen Gruppenrichtlinien (als Administrator) – gpedit.msc
  • Daraufhin navigieren Sie zu Computerkonfiguration > Windows-Einstellungen > Sicherheitseinstellungen > Lokale Richtlinien > Zuweisen von Benutzerrechten 
  • daraufhin wählen Sie hier den Eintrag „Herunterfahren des Systems“ und fügen dort den Benutzer bzw. die Gruppe hinzu, die den Computer remote ausschalten darf. 
  • Danach fügen Sie den selben Benutzer auch im Eintrag „Erzwingen des Herunterfahrens von einem Remotesystem aus“ hinzu.

Anmerkung: In einer Domäne funktioniert das erfahrungsgemäß immer; ansonsten kann es hin und wieder zu Problemen kommen – Hinweis fügen Sie den Benutzernamen mit Computername\Benutzer hinzu (Computer ist dabei der Computer, von dem der Computer remote heruntergefahren werden soll. Im optimalsten Fall ist es jedoch eine AD-Gruppe, die die Benutzer beinhaltet, die das dürfen sollen.

Zu guter letzt gibt es noch eine Mischlösung:

  • shutdown -i 

Führt dazu, dass man ein Dialogfeld bekommt, mit dem man den sowohl den lokalen Computer herunterfahren kann als auch einen anderen, sofern man dazu berechtigt ist. (siehe Remote Herunterfahren)

Möglichkeit 2: psshutdown

Eine weitere Möglichkeit ist die Verwendung des des Tools „psshutdown“ (grundsätzlich kann es für den beabsichtigten Zeck genau das selbe, wie shutdown.exe hat aber mehr Parameter). Da für diesen Anwendungszweck die Verwendung nicht notwendig ist, sei lediglich auf die Technet-Seite verwiesen – hier: http://technet.microsoft.com/en-us/sysinternals/bb897541

Möglichkeit 3: Tastenkürzel

Die Ansätze mit den Batch-Dateien und die Befehlszeilen sind dann sinnvoll, wenn man die Funktion öfters benötigt. Braucht man sie lediglich selten, dann kann man sich mit den folgenden Tastenkürzel helfen.

  • Ctrl+Alt+End
    • hat in einer Terminal-Session die selbe Funktion, wie Ctrl+Alt+Entf auf dem lokalen Computer. Dabei besteht auch die Möglichkeit den Computer herunterzufahren. (rechts unten)
  • Alt + F4
    • führt zum „Windows Herunterfahren Dialog“. Damit kann man auch den Computer herunterfahren. 

Möglichkeit 4:Befehl aktivieren (Windows XP only)

Unter Windows XP gab es noch die Möglichkeit den Button manuell zu aktivieren (siehe „Abmelden“ und „Beenden“ unter XP hinzufügen – http://support.microsoft.com/kb/303070/de) Diese Funktion steht unter Windows 7 nicht mehr zur Verfügung. Auch über die Registry ist mir kein Weg bekannt, das trotzdem zu bewirken – die selben Registry Settings führen jedenfalls nicht zum gewünschten Ergebnis.  

Möglichkeit 5: WMI

Nun zu einer etwas exotischeren Lösung: Über WMI (Windows Management Instrumentation Object).

Das WMI-Objektmodell kann man prinzipiell über alle mir bekannten Programmiersprachen ansprechen. So zum Beispiel über powershell.

Das geht natürlich auch Remot (siehe „remote_shutdown_vbs.rar“ – Quelle). Beachten Sie auch hierbei die Einstellungen in den Gruppenrichtlinien, da sonst der Befehl nicht funktioniert.

Möglichkeit 6: powershell

Wenn wir schon bei den exotischen Varianten sind, dann auch noch die Powershell-Varianten.

lokalen Computer:

  • stop-computer .
  • restart-computer .

remote Computer

  • stop-computer <Computername>
  • restart-computer <Computername>

Auch hier kommt es zur Problematik mit den Berechtigungen, sonst kommt es zu folgender Fehlermeldung.

Fazit

Nur bei Windows XP bestand die Möglichkeit den Startmenüeintrag zu aktivieren. Unter Win 7 geht das nicht mehr. Wer es selten benötigt, sollte auf die Tastenkürzel zurückgreifen. Wer es häufiger braucht, sollte sich mittels Batch Datei einen Startmenüeintrag basteln (zB siehe oben). Die Skriptinglösungen (zB VBS & WMI, powershell) sind dann nützlich, wenn man den Shutdown in ein Skript einbindet (zB Remote-Software Installation usw.) oder eine Reihe von PCs (aus einer Textdatei) herunterfahren möchte. Psshutdown bietet meines Wissens nach keine wesentlichen Vorteile gegenüber shutdown.exe. Sollte aber etwas mit shutdown.exe nicht realisierbar sein, dann lohnt vielleicht der Blick in die psshutdown-Doku.

Literatur