VM-Eigenschaften mit PowerShell auslesen: Dynamic Memory, CPUs, Generation, Version

    Rechtsleitfaden zur Software-Lizenzierung: Wie verhalten bei Audits?, Einsatz gebrauchter Software, Miete vs. Kauf, u.v.m. Jetzt kostenlos herunterladen »

    (Anzeige)

    Virtuelle Maschinen unter Hyper-VWenn man einen Über­blick über VMs unter Hyper-V erhalten will und heraus­finden möchte, welche Ressourcen ihnen zugeteilt wurden und welche Eigen­schaften sie aufweisen, dann lässt sich das mit Power­Shell relativ einfach bewerk­stelligen.

    Einige grundlegende Informationen zum Status von VMs und zu den von ihnen belegten Ressourcen erhält man im Hyper-V Manager. Er zeigt standard­mäß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 tabel­larischen Aufbereitung der Daten nicht einmal auf eine GUI verzichten muss.

    Infos zu virtuellen Maschinen im Hyper-V Manager

    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 weiter­verarbeiten lässt. Im ersten Schritt legt man mit

    "Name,Version,Generation,RAM beim Start,Dynamischer Arbeitsspeicher,vCPUs" > VMinv.csv

    die Spalten­über­schriften 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.

    Ausgabe der CSV-Daten mit Out-GridView

    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.

    Keine Kommentare