Tags: Hyper-V, PowerShell
Wenn man einen Überblick über VMs unter Hyper-V erhalten will und herausfinden möchte, welche Ressourcen ihnen zugeteilt wurden und welche Eigenschaften sie aufweisen, dann lässt sich das mit PowerShell relativ einfach bewerkstelligen.
Einige grundlegende Informationen zum Status von VMs und zu den von ihnen belegten Ressourcen erhält man im Hyper-V Manager. Er zeigt standardmäßig in der Übersicht die CPU-Auslastung, den zugewiesenen Speicher oder den Zustand (unter der Spalte "Phase") der virtuellen Maschinen.
Informationen einsammeln mit Get-VM
Weitergehende Auskünfte erhält man nur, wenn man die Einstellungen der einzelnen VMs öffnet. Für die Erstellung eines Inventars wäre dieses Vorgehen zu umständlich. PowerShell ist hier die klar bessere Wahl, wobei man bei der tabellarischen Aufbereitung der Daten nicht einmal auf eine GUI verzichten muss.
Praktisch alle wesentlichen Informationen über virtuelle Maschinen liefert das Cmdlet Get-VM. Per Vorgabe gibt dieses aber nur eine Handvoll Eigenschaften der angezeigten VMs aus. Wie man sich aber mit
Get-VM <Name der VM>| select -Property *
leicht überzeugen kann, liefert es auf Anfrage auch viel mehr Einstellungen. Für die das Ressourcen-Management von wird man hier besonders Daten zum Arbeitsspeicher und den CPUs auswählen.
Daten zu RAM und CPUs ausgeben
Dazu gehören etwa MemoryAssigned, DynamicMemoryEnabled oder ProcessorCount. Zusätzlich interessant könnte sein, welche Version der virtuellen Hardware und der Integrationsdienste vorliegt oder ob die VM von der Generation 1 oder 2 ist.
Das folgende Beispiel ermittelt die Eigenschaften Name, Version, Generation, MemoryStartup, DynamicMemoryEnabled und ProcessorCount. Möchte man andere oder zusätzliche Daten erfassen, dann muss man die Befehle entsprechend anpassen.
Eigenschaften in CSV-Datei speichern
Anstatt die Daten einfach auf stdout auszugeben, erstellen die folgenden Befehle eine CSV-Datei, die sich etwa in Excel weiterverarbeiten lässt. Im ersten Schritt legt man mit
"Name,Version,Generation,RAM beim Start,Dynamischer Arbeitsspeicher,vCPUs" > VMinv.csv
die Spaltenüberschriften für die Eigenschaften an, die man auslesen möchte. Diese erfasst man, indem man die Ausgabe von Get-VM durch eine Schleife laufen lässt, in welcher der Operator -join die gewählten Eigenschaften zu einer Komma-separierten Liste verknüpft:
Get-VM | %{($_.Name, $_.Version, $_.Generation, ($_.MemoryStartup/1MB), $_.DynamicMemoryEnabled, $_.ProcessorCount) -join ","} | Add-Content -Path .\VMinv.csv
Dieser Aufruf rechnet den beim Start zugewiesenen Speicher gleich in MB um. Das Cmdlet Add-Content hängt anschließend den Output des Befehls an die zuvor erzeugte CSV-Datei an. Diese kann man mit
Import-Csv -Path .\VMinv.csv | Out-GridView
in einer Tabelle ausgeben.
Auswahl der VMs einschränken
In der Praxis wird man die VMs vielleicht nach bestimmten Kriterien auswählen, bevor man ein Inventar erstellt. Kriterien könnten dabei der Status (ein- oder ausgeschaltet, pausiert, etc.) sein oder ob es sich um hochverfügbare VMs im Cluster handelt. Dazu ergänzt man den Aufruf von Get-VM um einen entsprechenden Filter:
Get-VM | ? state -eq "running" | %{($_.Name, $_.Version …
Möchte man nur hochverfügbare VMs berücksichtigen, dann fragt man dazu die Eigenschaft isClustered ab.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Hyper-V Switch mit PowerShell erstellen, verwalten und löschen
- 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
Weitere Links