Get-VM: Virtuelle Maschinen unter vSphere mit PowerCLI anzeigen und filtern

    Cmdlet Get-VM in VMware PowerCLIGet-VM dient in PowerCLI dazu, einen Überblick über die vir­tuellen Maschinen und ihre Konfi­guration zu gewinnen. Sein wesent­licher Nutzen besteht darin, dass man das Ergebnis an andere Cmdlets per Pipe übergeben kann. Auf diese Weise spart man sich bei diesen Befehlen die Eingabe der einzelnen VM-Namen.

    Get-VM lässt sich nutzen, wenn man entweder mit vCenter oder direkt mit einem ESXi-Host verbunden ist. Im ersten Fall kann man Filter über die gesamte virtuelle Infrastruktur und ihre Ressourcen anwenden, um VMs zu ermitteln.

    VMs über Namen filtern

    Ruft man Get-VM ohne Argumente auf, dann liefert es eine Liste aller VMs, die vCenter oder ESXi bekannt sind. Wie bei VM-bezogenen Befehlen üblich, kann man das Ergebnis durch die Angabe von Namen eingrenzen, wobei dieser Parameter die Verwendung von Wildcards zulässt:

    Get-VM -Name Win*

    In der Praxis interessanter ist jedoch die Möglichkeit, VMs anhand der von ihnen genutzten Ressourcen zu filtern, also auf welchem Host oder Cluster sie laufen, auf welchem Datastore sie abgelegt sind, zu welcher vApp sie gehören, an welchen vSwitch sie angeschlossen oder welchem Datacenter sie zugeordnet sind.

    Auf Container eingrenzen mit Location

    Diesem Zweck dient der Parameter Location, der alle Container-Objekte abbildet (Resource Pool, vApp, Host, Folder, Cluster, Datacenter). Um beispielsweise alle VMs für den Host esxi-60-L2 anzuzeigen, die aktuell ausgeschaltet sind, gibt man diesen Befehl ein:

    Get-VM -Location esxi-60-L2.contoso.de | ? Powerstate -eq "PoweredOff"

    Möchte man alle VMs ermitteln, die mit einem bestimmten Distributed vSwitch verbunden sind, dann bietet das Cmdlet dafür einen eigenen Parameter namens VirtualSwitch. Entsprechendes gilt für Datastores:

    Get-VM -Datastore "Synology-iSCSI-0"

    Schließlich bietet Get-VM noch einen Parameter, anhand dessen sich VMs nach Tags filtern lassen. Diese Metadaten bestehen aus Kategorien wie zum Beispiel "Betriebssystem" und zugehörigen Werten wie "Windows 7" (siehe dazu: vSphere Tags: Hosts, VMs, Cluster und andere Objekte kategorisieren).

    Der Parameter Tag erwartet indes nur den Wert und nicht die Kategorie:

    Get-VM -Tag "Windows 7"

    Dieser Befehl würde alle VMs zurückgeben, die mit dem Schlagwort "Windows 7" ausgezeichnet wurden.

    Weitere Attribute für Filter

    Wenn die Eingrenzung anhand dieser Kriterien nicht reicht, dann stehen noch weitere Eigenschaften zur Verfügung, die man einem Where-Object übergeben kann. Dazu zählen unter anderem:

    • DrsAutomationLevel
    • Guest (Name des Gast-OS, wenn die VM eingeschaltet ist und die VMware Tools installiert sind)
    • HARestartPriority
    • MemoryGB und MemoryMB (konfiguriertes vRAM in GB bzw. MB)
    • NumCpu (Zahl der konfigurierten vCPUs)
    • PowerState (Betriebszustand)
    • ProvisionedSpaceGB und UsedSpaceGB (zugeteilter bzw. verbrauchter Speicherplatz)
    • Version (der virtuellen Hardware)

    Zum Beispiel würde dieser Aufruf alle VMs identifizieren, die auf dem Datastore Synology-iSCSI-0 abgelegt sind und mehr als 50 GB Plattenplatz verbrauchen:

    Get-VM -Datastore "Synology-iSCSI-0" | ? UsedSpaceGB -gt 50

    Für eine solche Abfrage sind einige Anwendungsfälle denkbar. Ist etwa die Kapazität eines Datastores erschöpft, so dass man VMs auf ein anderes Storage verschieben muss, dann kann man auf diese Weise die großen Platzfresser ermitteln und direkt an Move-VM übergeben.

    Keine Kommentare