VMs starten, herunterfahren und anhalten mit VMware PowerCLI

    VM-Betriebsmodi in vSphere Web ClientAuch bei ein­fachen Opera­tionen wie dem Ein- und Aus­schalten von virtu­ellen Ma­schinen hat Power­Shell oft Vor­teile gegen­über dem vSphere Web Client. Das gilt etwa dann, wenn man einen Be­fehl auf mehrere VMs an­wenden will, und diese Filter­kriterien ent­sprechen müssen.

    Wenn man sich im vSphere Web Client die Auswahl unter Betrieb ­im Kontextmenü einer VM ansieht, dann stehen dort gleich mehrere Aktionen zu Verfügung. Das sind zum einen jene, die der Hypervisor von außen auf die VM anwendet, darunter das Ein- und Ausschalten oder Zurücksetzen. Zusätzlich gibt es die Option, das Gast­betriebs­system mit Hilfe der VMware Tools herunter­zufahren oder neu zu starten.

    Hartes Ausschalten und Reset vermeiden

    In die erste Kategorie fallen Start-VM, Stop-VM und Restart-VM. Während es zu Start-VM aus naheliegenden Gründen keine Alternative von innerhalb der VM gibt, sind ansonsten die Cmdlets Stop-VMGuest und Restart-VMGuest vorzuziehen.

    Die ersten Cmdlets repräsentieren nämlich harte Varianten, die eine VM einfach ausschalten bzw. zurücksetzen und so zu Datenverlusten führen können. Die Wirkung von Stop-VM und Restart-VM entspricht in der physikalischen Welt dem Ziehen des Netzsteckers bzw. dem Drücken der Reset-Taste.

    Diese Maßnahmen scheinen nur angebracht, wenn eine VM hängt und auf keine Kommandos mehr reagiert. Für diesen Fall bietet Stop-VM noch zusätzlich den Schalter -kill. Seine Verwendung setzt jedoch voraus, dass man die Verbindung nicht über vCenter, sondern direkt über den betreffenden ESXi-Host aufbaut.

    Herunterfahren und Neustart

    Der Aufruf der genannten Cmdlets erfolgt durchwegs nach dem gleichen Muster: Sie erwarten den Namen der virtuellen Maschinen über den Parameter VM:

    Stop-VMGuest -VM "Windows 7 x86"

    Meistens wird man PowerCLI dann einsetzen, wenn man etwa für Wartungsarbeiten eine größere Zahl an VMs herunterfahren oder starten muss. In diesem Fall wäre es umständlich, alle Namen der VMs für den Aufruf der Cmdlets einzutippen.

    Hier empfiehlt sich der Einsatz von Get-VM, das virtuelle Maschinen nach verschiedenen Kriterien filtern kann. Sollen etwa alle VMs heruntergefahren werden, die auf dem Datastore QNAP-iSCSI-0 gespeichert sind, dann könnte der Aufruf so aussehen:

    Get-VM -Datastore "QNAP-iSCSI-0" | Stop-VMGuest

    Wenn man diesen Befehl abschickt, wird man schnell feststellen, dass Stop-VMGuest für jede einzelne VM eine Bestätigung des Benutzers anfordert. Bei einer größeren Zahl an VMs ist dieses Verhalten meist unerwünscht.

    VM mit Get-VM ermitteln und mit Stop-VMGuest herunterfahren.

    Stattdessen kann man Stop-VMGuest erst mit dem Schalter -WhatIf aufruft, um zu sehen, welche Auswirkung der Befehl hätte. Zusätzlich kann man die Sammlung auf eingeschaltete VMs eingrenzen, um Fehlermeldungen zu vermeiden. Anschließend unterdrückt man mit

    Get-VM -Datastore "QNAP-iSCSI-0" | ? Powerstate -eq "PoweredOn" | Stop-VMGuest -confirm:$false

    die Nachfragen. Den Parameter Confirm unterstützen alle bisher genannten Cmdlets.

    Virtuelle Maschinen anhalten

    Neben den Neustarten und Herunterfahren einer VM besteht noch die Möglichkeit, diese "einzufrieren" (der Web Client bezeichnet diese Aktion mit Anhalten, Hyper-V mit Speichern). Der Speicherinhalt der VM wird dabei auf Platte geschrieben, so dass man ihren Zustand anschließend wiederherstellen kann.

    Auch hier bieten sich eine interne und eine externe Methode an, wobei die Unterschiede nicht wesentlich sind. Bei Suspend-VM versetzt der Hypervisor die VM in den Ruhezustand, während Suspend-VMGuest den Energie­sparmodus im Gastbetriebs­system aktiviert:

    Suspend-VMGuest -VM "Windows 7 x86" -confirm:$false

    Diese Aktion entspräche also dem Befehl Energie sparen im Startmenü von Windows 7. In beiden Fällen reanimiert man die VM mit Start-VM.

    Keine Kommentare