VMs in Hyper-V einschalten, anhalten und herunterfahren mit PowerShell


    Tags: ,

    Powershell-LogoPowerShell kann dank zahlreicher neuer Cmdlets mittlerweile auch die Verwaltung von Hyper-V automatisieren. Dazu zählen auch relativ einfache Aufgaben wie das Starten oder Herunterfahren von virtuellen Maschinen, die sich in einem Vorgang für mehrere VMs auf verschiedenen Hosts gleichzeitig erledigen lassen.

    Die einfachste Variante für das Hoch- oder Herunterfahren von VMs besteht darin, dass man den betreffenden Cmdlets explizit einen oder mehrere Namen von VMs übergibt. Interessanter sind Anwendungen, bei denen virtuelle Maschinen nach Kriterien wie Status, Uptime oder der Version der Integration Services gefiltert und die gewünschten Aktionen auf sie angewandt werden.

    Cmdlets zur Änderung des Betriebszustands

    Bei Hyper-V sind für die genannten Aufgaben die Cmdlets Start-VM, Suspend-VM und Resume-VM, Restart-VM sowie Stop-VM zuständig. Mit Ausnahme des Letzten ruft man sie nur mit den Namen der VM als Parameter auf, um die betreffenden virtuellen Maschinen zu starten, anzuhalten, fortzusetzen, neu zu booten oder herunterzufahren. Hinzu kommen bei Bedarf die Angaben zu einem oder mehreren Remote-Hosts. Ein Beispielaufruf in einer PowerShell mit administrativen Rechten sieht so aus:

    Start-VM "Windows 8.1 Pro" -Computername HV-Host1

    Virtuelle Maschinen speichern oder herunterfahren

    Der Aufruf von Stop-VM unterstützt zusätzlich Schalter, mit denen man festlegt, dass die VM gespeichert (-Save) oder ausgeschaltet (-TurnOff) wird. Ohne diese Angabe besteht das Standardverhalten darin, dass die VM das Gastbetriebssystem herunterfährt. Schließlich sieht das Cmdlet mit -Force noch vor, das Herunterfahren einer VM zu erzwingen. Um eine virtuelle Maschine zu speichern, die auf dem lokalen Rechner läuft, gibt man einen Befehl nach diesem Muster ein:

    Stop-VM "Windows 8.1 Pro" -Save

    Virtuelle Maschine speichern in PowerShell

    Alle gespeicherten VMs herunterfahren

    Um den Betriebszustand von VMs abhängig von bestimmten Kriterien zu steuern, kann man sie nach Eigenschaften filtern und die gewünschte Aktion auf mehrere von ihnen gleichzeitig anwenden. Wenn man zum Beispiel alle VMs, die sich im gespeicherten Zustand befinden, starten möchte, um sie anschließend herunterzufahren, dann könnte man so vorgehen:

    Get-VM | where{$_.State -eq "Saved"} | Start-VM -Passthru | Stop-VM

    Dieses Beispiel wirkt sich nur auf die virtuellen Maschinen des lokalen Hosts aus, aber man könnte dem Parameter -Computername auch eine durch Komma getrennte Liste von mehreren Servern übergeben.

    VMs abhängig von der Uptime neu starten

    Eine weitere Anwendung für PowerShell könnte darin bestehen, alle VMs, die bereits länger als 180 Tage laufen, neu zu starten:

    Get-VM | where{$_.Uptime -gt [timespan]"180.00:00:00"} | Restart-VM

    Das timespan-Objekt folgt dem Format dd.hh:mm:ss, das man entsprechend nutzen kann, um beliebige andere Zeiträume zu definieren.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Ähnliche Beiträge

    Weitere Links