Tags: vSphere, PowerShell
Get-VM dient in PowerCLI dazu, einen Überblick über die virtuellen Maschinen und ihre Konfiguration zu gewinnen. Sein wesentlicher 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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- VMware bringt künftig vCenter- vor ESXi-Releases, vSphere 8 U1 als IA verfügbar
- VMware PowerCLI v13: Alle Module nun für Windows, Mac und Linux, Update für vSAN und NSX
- VMware PowerCLI 12.6 bringt Cmdlets für das vCSA-Backup
- Tool für Maximalwerte in VMware vSphere, Poster für Cmdlets in PowerCLI 10
- VMware PowerCLI 10.0 für Windows, macOS und Linux: Installation, Anmeldung an vSphere, Upgrade
Weitere Links