Tags: Hyper-V, PowerShell
PowerShell 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
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
Ähnliche Beiträge
- Virtuelle Maschine vollständig mit PowerShell erstellen (am Beispiel von Azure Stack HCI)
- PowerShell-Remoting, Hyper-V Manager: Fehler wegen Netzwerkverbindungstyp "Öffentlich"
- Hyper-V-Host mit PowerShell (remote) konfigurieren, vSwitch hinzufügen
- Module für Active Directory, Hyper-V, WMI laden in PowerShell Core 6
- DVD-Laufwerke von VMs anzeigen und entfernen, Medien auswerfen
Weitere Links