PowerCLI von VMWare wird zur allgegenwärtigen Schnittstelle für Hypervisor-Virtualisierungsadministratoren von ESXi-unterstützter Hardware. Das Erlernen der Verwaltung von VMware über PowerShell und PowerCLI ist eine starke Ergänzung für Ihr Toolkit. In diesem PowerCLI-Tutorial erfahren Sie genau, wie das funktioniert.
In diesem Tutorial lernen Sie:
- die Grundlagen der Verbindung mit der VMware-Infrastruktur über PowerCLI
- sich mit Cmdlets vertraut machen, um mit VMware-Objekten zu arbeiten
- sich mit dem Wissen ausstatten, um
- VMware weiterhin über PowerCLI zu verwalten
Legen wir los!
Das sollten Sie haben und wissen
Bevor Sie in diesem PowerCLI-Tutorial zu weit gehen, ist es immer wichtig sicherzustellen, dass Sie und ich auf derselben Seite sind. In diesem Artikel gehe ich davon aus, dass:
- Sie über grundlegende PowerShell-Erfahrung verfügen. Sie müssen kein PowerShell-Experte sein, aber jede PowerShell-Vertrautheit wird Ihnen gut dienen.
- Sie einen VMware ESXi-Host oder vCenter-Appliance zum Verbinden und Testen haben
- Sie an einem Windows (oder Mac / Linux) Arbeitsplatz arbeiten
- Sie PowerCLI bereits installiert und eine Verbindung hergestellt haben. Andernfalls lesen Sie diesen Artikel zur PowerCLI-Installation.
I’ll be using PowerCLI v 11.4.0. I will be working from a Windows 10 workstation with Windows PowerShell 5.1, but you’re welcome to use PowerShell 6 instead as there’s feature parity for this tutorial.
Sammeln von Informationen zu ESXi-Hosts mit PowerCLI
Bevor Sie in die virtuelle Ebene unserer vSphere-Umgebung eintauchen, ist es ratsam, die physische Hardware-Ebene zu überprüfen. VMware PowerCLI bietet einen Befehl direkt zu diesem Zweck, um detaillierte Informationen zu sammeln, genannt Get-VMHost
.
Wenn Sie mit Ihrem vCenter-Server oder ESXi-Host verbunden sind, führen Sie den folgenden Befehl aus.

Da ich mit einer vCenter Server Appliance verbunden bin, die zwei separate ESXi-Hosts verwaltet, erhalte ich grundlegende Informationen über die verwalteten Hosts. Der Befehl Get-VMHost
ermöglicht es Ihnen, die Hardware-Fähigkeiten Ihrer Virtualisierungs-Hosts zu überprüfen. Standardmäßig gibt Get-VMHost
jedoch nicht alle verfügbaren Informationen zurück.
Wenn Sie den Befehl Get-VMHost
an Format-List
anhängen, erhalten Sie eine Konsolenausgabe mit allen Informationen zu den angegebenen Hosts.

Get-VMHost | Format-List
Alternativ können Sie auch selektiv einzelne Eigenschaften des VMHost-Objekts auswählen, mit dem Sie arbeiten, z.B.:
Mit dieser ausführlicheren Ausgabe erhalten Sie einen noch besseren Überblick über die zugrunde liegende Hardware, auf der Ihre virtualisierten Workloads ausgeführt werden. Einige der Informationen wären insbesondere:
- Lizenzvalidierungsinfo
- Summe von CPU/Memory
- Hardwareherstellermodell
- DNS-Hostname
Nach der Überprüfung können diese Informationen möglicherweise mit dem Export-CSV
-Befehl in eine CSV-Datei exportiert werden.
Untersuchen von VMs mit PowerCLI
Lassen Sie uns nun in diesem PowerCLI-Tutorial in ein weiteres Thema eintauchen, indem wir überprüfen, welche virtuellen Maschinen sich derzeit auf einem bestimmten ESXi-Host befinden.
Der Befehl Get-VM
ist ein praktischer Befehl, den Sie verwenden können, um VM-Informationen zu überprüfen.
Die Ausgabe dieses Befehls sieht wie folgt aus:

Die obige Ausgabe bietet eine vollständige Statusliste der derzeit ausgeführten VMs auf einem bestimmten Host. Wenn Sie sich dafür entscheiden, keinen einzelnen Host anzugeben, wie ich es oben getan habe, erhalten Sie eine Tabelle mit Informationen für jeden nachfolgenden Host und die VMs auf jedem Host.
Wenn Sie jemals ein Problem beheben müssen und die Anzahl der virtuellen Maschinen auf einem bestimmten Host wissen möchten oder Informationen zum ESXi-Host mithilfe von VMware PowerCLI sammeln müssen, können Sie diese Befehle verwenden. Die Berichtsfunktion, die Ihnen zur Verfügung steht, wird immer umfangreicher!
Inspektion von virtuellen Switches mit PowerCLI
Für diejenigen von uns, die mit der Konfiguration oder Verwaltung der virtuellen Netzwerke eines vCenter-Clusters beauftragt sind, gibt es eine Vielzahl von Netzwerkbefehlen für jeden Anwendungsfall. Wenn Sie die konfigurierten virtuellen Switches in Ihrer vSphere-Umgebung anzeigen möchten, verwenden Sie bitte folgenden Befehl:
Je nach Anzahl der virtuellen Netzwerke und virtuellen Switches, die Sie haben, kann Ihre resultierende Liste ziemlich groß sein. In meinem Fall, wie Sie unten sehen können, habe ich einen einzigen DSwitch, der ein Distributed Virtual Switch ist.
In einer Enterprise vSphere-Implementierung, in der sich viele ESXi-Hosts in einem Cluster befinden, vereinfachen DSwitches die Bereitstellung von virtuellen Switches und Portgruppen über eine Vielzahl von Hosts mit derselben Konfiguration. Dies spart die manuelle Arbeit bei der Erstellung identischer Netzwerkkonfigurationen auf jedem Host und ist eine großartige Möglichkeit, Ihren Cluster zu skalieren!

Auffinden von an ein virtuelles Netzwerk angeschlossenen VMs mit PowerCLI
Wenn Sie den Umfang eines Problems eingrenzen möchten, möchten Sie vielleicht wissen, welche VMs mit welchen Netzwerken verbunden sind. Um das herauszufinden, können Sie den Befehl Get-VirtualPortGroup
verwenden. In diesem PowerCLI-Tutorial erfahren Sie mehr über dieses Cmdlet.
A port group is essentially a virtual network. To display all port groups, run Get-VirtualPortGroup
without any parameters. You should then see a listing of all virtual port groups present in your vSphere environment.

Um alle VMs in dieser Portgruppe (DPortGroup in meinem Fall) zu finden, können Sie das folgende Skript ausführen. Stellen Sie sicher, dass Sie den Wert DPortGroup durch den Namen Ihrer virtuellen Portgruppe ersetzen.
In dieser Einzeileranweisung listen wir alle virtuellen Maschinen auf, die in dieser vCenter-Appliance existieren, und filtern dann mit dem Where-Object
-Cmdlet nur diejenigen VMs heraus, deren Netzwerkname mit unserer Portgruppe übereinstimmt.

Mit dieser Ausgabe können Sie festlegen, welche Maschinen mit welchem Netzwerk verbunden sind und konfiguriert sind.
Wenn Sie aufgefordert werden, zu ermitteln und zu analysieren, welche VMs mit einem bestimmten Netzwerk in VMware verbunden sind, sind Sie nun in der Lage, eine PowerCLI-Reporting-Lösung für diese Frage bereitzustellen.
Abrufen von Informationen zur Betriebssystemversion Ihrer VMs mit PowerCLI
Der Großteil der administrativen Arbeit innerhalb von VMware wird auf der Ebene der virtuellen Maschine durchgeführt. Sie erhalten wahrscheinlich unzählige Anfragen für Aufgaben wie das Abrufen einer Liste aller Festplattengrößen auf VMs oder das Abrufen von Gast-Betriebssystemversionen für all Ihre Server, unter anderem.
Diese Aufgaben sind bei großen Mengen umständlich. PowerCLI kann diese mit einigen wichtigen Cmdlets optimieren, die Sie in Ihrem Arsenal haben sollten. In diesem PowerCLI-Tutorial werden wir uns damit befassen.
Möglicherweise wurde Ihnen irgendwann die Frage gestellt: „Wie viele Ubuntu-Server haben wir in unserem VMware-Cluster?“. Sie haben dann wahrscheinlich viel Zeit damit verbracht, in vCenter nach einer Antwort zu suchen. PowerCLI kann diesen Prozess vereinfachen, indem es die VM-Objekte in vCenter betrachtet und einige PowerShell-Tricks auf die Ausgabe anwendet.
Schauen Sie sich das folgende Skript an, das VM-Informationen zusammenstellt. Dieser Ausschnitt verwendet den Befehl Get-View
, auf den wir später genauer eingehen werden. Sie sollten jedoch wissen, dass dies eine fortgeschrittene Methode zum Abrufen von Eigenschaften von VMware-Objekten ist. In diesem Fall sammeln wir verschachtelte Eigenschaften, die auf diese Weise am einfachsten abgerufen werden können.
Der obige Code ruft mithilfe des PowerCLI-Cmdlets Get-VM
eine Liste der virtuellen Maschinen ab, sortiert diese Liste mit dem PowerShell-Cmdlet Sort-Object
und ruft dann mithilfe des PowerCLI-Cmdlets Get-View
einige der Objekteigenschaften ab.
Wenn ich dies in meiner Umgebung ausführe, erhalte ich das folgende Ergebnis. Sie können den Namen der VM in vCenter, das Konfigurierte Betriebssystem
, das angibt, wie die virtuelle Hardware von VMware das Gast-Betriebssystem interpretiert, und das tatsächliche Ausgeführte Betriebssystem
sehen, das das tatsächliche Betriebssystem darstellt.

Mit den VMs Replicant und Scriptrunner, die im Cluster ausgeschaltet sind, können Sie den Wert „Running OS“ für sie nicht sehen. Das Betriebssystem wird vom VMware Tools-Dienst erfasst. Wenn es nicht verfügbar ist, kann PowerCLI keine Informationen zum Betriebssystem abrufen.
Erstellen von CSV-Berichten mit PowerCLI
VMware Tools ist ein in-Guest-Dienst für Windows- und Linux-VMs, der dem Hypervisor zusätzliche Informationen und Verwaltungsfunktionen bietet. In der Regel stellt dies einen sauberen Shutdown, Informationen zum Betriebssystem und eine höhere Auflösung der Konsolendarstellung der VMs bereit.
A convenient way to report on and provide this information would be to pipe the above script into the Export-CSV
cmdlet. Export-Csv
will create a CSV file with the same information you see in the console.
Nach Ausführung des obigen Codes sollte es möglich sein, die CSV-Datei mit Excel zu öffnen, um den Bericht zu überprüfen.

Untersuchen von virtuellen Festplatten mit PowerCLI
Der Befehl Get-Harddisk
ist ein weiterer nützlicher Befehl. Das Cmdlet Get-HardDisk
ermöglicht es Ihnen, Informationen über virtuelle Festplatten, die an VMs angehängt sind, zu untersuchen.
Zum Beispiel könnten Sie folgenden Befehl ausführen, um Informationen über die virtuelle Festplatte, die an die VM exchange1 angehängt ist, abzufragen:

Einige dieser Informationen können redundant sein, wie z.B. die Kapazität in KB vs. GB. Aber es ist wertvoll zu wissen, welche StorageFormat
(dünne/dicke Bereitstellungstypen) verwendet werden und den VMDK-Dateinamen zu kennen.
Zum Beispiel, wenn Sie ein häufiges Problem sehen und alle VM-Festplatten auf demselben Datastore-Volume liegen, kann dieses Wissen die Fehlerbehebung beschleunigen.
Untersuchen von virtuellen Netzwerkadaptern mit PowerCLI
Neben der Überprüfung von Festplatteninformationen Ihrer virtuellen Maschinen möchten Sie möglicherweise auch die virtuellen Netzwerkadapter überprüfen. Um diese Eigenschaften für eine einzelne VM zu überprüfen, können Sie das Cmdlet Get-NetworkAdapter
verwenden.
Während Sie zuvor nach allen VMs gesucht haben, die sich im selben Netzwerk befinden, möchten Sie dieses Mal nur die Adapter sehen, die mit einer bestimmten VM verbunden sind.

Dies ist nützlich, wenn Sie VMs mit mehreren Netzwerkadaptern beheben möchten. Sie können schnell und auf einen Blick feststellen, ob diese Adapter mit den richtigen Netzwerken verbunden sind.
Ausführen von PowerShell-Skripten in VMs mit Invoke-VMScript
Mit dem Invoke-VMScript
können Sie auch PowerShell-Code direkt in der VM ausführen, ohne Netzwerkverbindung. Wenn Sie bereits PowerShell Direct in einer Hyper-V-Umgebung verwendet haben, wird dies eine ähnliche Erfahrung sein.
Anstatt eine PowerShell-Remoting-Sitzung zu erstellen oder das Cmdlet Invoke-Command
über das Netzwerk zu verwenden, kann das Cmdlet Invoke-VMScript
Befehle direkt an die VM senden, ohne normale WinRM- oder SSH-Konnektivität.
Als Beispiel möchten Sie möglicherweise eine einfache Verzeichnisliste auf einer VM mit dem Namen exchange1 durchführen. Dazu würden Sie dir C:\
als Wert für den Parameter ScriptText
übergeben, wie unten gezeigt.
Die Ergebnisse sind so, als ob Sie die Befehle direkt von der VM-Konsole ausgeführt hätten. Invoke-VMScript
leitet dann die gesamte Ausgabe des auf der VM ausgeführten Befehls weiter.

Obwohl dies ein einfaches Beispiel ist, können Sie so kompliziert werden, wie Sie möchten. Dieses PowerCLI-Cmdlet ermöglicht es Ihnen, Batch-, PowerShell- oder Bash-Typen im ScriptText
-Parameter anzugeben.
Sie können auch fortgeschrittener vorgehen. Unten sehen Sie, wie Sie Invoke-VMScript
verwenden, um PowerShell-Code mit einer separaten $script
-Variablen für die Eingabe des ScriptText
-Parameters auszuführen. Dadurch können wir benutzerdefinierte Skripteingaben für die VM erstellen, die verarbeitet werden sollen.
Der Wert des ScriptText
-Parameters muss ein String sein. Das ist der Grund, warum die $script
-Variable die äußeren einfachen Anführungszeichen benötigt.
Sie haben möglicherweise auch die Verwendung des GuestCredential
-Parameters bemerkt. Dieser Parameter wird verwendet, um sich im Betriebssystem der VM anzumelden. Dieser Parameter ist besonders nützlich, wenn Sie das Skript mit einem anderen Konto ausführen möchten.
Ihr Skript sollte eine Ausgabe ähnlich wie unten erzeugen.

Das Ergebnis dieses Skripts liefert uns Informationen über die Festplatte der VM. Basierend darauf wissen Sie, dass es sich um eine Remote-VM handelt, da der freundliche Name des Laufwerks VMware Virtual Disk
ist.
Fortschrittliche Verwendung von Get-View
Sie haben möglicherweise gesehen, dass einige der grundlegenden Cmdlets eine Eigenschaft namens ExtensionData
zurückgeben. Sie können diese Eigenschaft finden, indem Sie viele PowerCLI-Cmdlets an das PowerShell-Cmdlet Get-Member
weiterleiten. Wenn Sie sich gefragt haben, was das ist, haben Sie jetzt die Möglichkeit, es herauszufinden.
Der nächste Schritt in diesem Unternehmen besteht darin, das Cmdlet Get-View
zu verstehen. VMware PowerCLI nutzt viele verschiedene Abfragen für die VM, um die übersichtliche und einfache Ausgabe von Get-VM
bereitzustellen. Aber es gibt viel unter der Oberfläche, das nur mit Hilfe des Cmdlets Get-View
zugänglich ist.
Sie werden wahrscheinlich viele Skripte sehen, die dieses Cmdlet verwenden. Es wäre ratsam, sich etwas Zeit zu nehmen, um dieses Cmdlet in Aktion zu sehen. Verwenden Sie das Cmdlet Get-View
, um einige Informationen zur virtuellen Maschine zu erhalten (exchange1 in diesem Beispiel).
Sie können sehen, dass die Filter
-Optionen dieses Cmdlets die Verwendung einer PowerShell-Hashtable erfordern und nicht einzelne Zeichenfolgenwerte. Seien Sie sich dessen bewusst, wenn Sie Ihre eigenen einzigartigen Skripte erstellen!
Das Ergebnis des oben genannten Befehls sind viele verschachtelte Konfigurationsinformationen und Methodenoptionen zum Ausführen von Aktionen gegen die VM oder zum Abrufen von Objekteigenschaften.

Wenn Sie das gleiche Skript oben verwenden und die Ausgabe an eine Variable senden, können Sie diese verschachtelten Optionen mit Punktnotation überprüfen. Hier können Sie alle zusätzlichen Informationen zum Gastbetriebssystem sehen und abrufen, über die Sie möglicherweise über PowerCLI berichten möchten.

Vielleicht möchten Sie eine einzelne Eigenschaft auswählen. In diesem Fall könnten Sie den folgenden Befehl ausführen, um einen einzelnen Wert einzugrenzen.
Es gibt viele Get-View
-Optionen für alle Arten von VMware-Objekten. Erkunden Sie gerne all diese Optionen und lesen Sie diesen informativen Artikel von VMware, der sich ausführlich mit diesem leistungsstarken Cmdlet befasst!
VMware Code Capture – Lernen Sie von Ihren Klicks
Wenn Sie PowerCLI nutzen möchten, aber lieber keinen Code eingeben möchten, ist Code Capture in vCenter genau das Richtige für Sie. Code Capture ist ein neues Entwicklertool, das ähnlich wie das Active Directory-Verwaltungszentrum funktioniert. Lassen Sie uns in diesem PowerCLI-Tutorial Code Capture behandeln.
Dieses Tool zeichnet alle Aktionen auf, die Sie in der GUI ausführen. Anschließend wandelt es all diese Aktionen um und liefert Ihnen PowerCLI-Skripte.
Standardmäßig ist Code Capture nicht aktiviert. Um es zu aktivieren, öffnen Sie Ihre vCenter-Appliance und navigieren Sie zu Menü -> Entwicklercenter, wie unten gezeigt.

Sobald Sie sich im Tab Entwicklercenter befinden, aktivieren Sie die Option Code Capture aktivieren.

Wenn Sie Code Capture aktivieren, sehen Sie einen roten Aufzeichnen-Button in der Kopfzeile Ihres vCenter. Sobald Sie es aktiviert haben, müssen Sie immer dann, wenn Sie eine Aktion aufzeichnen und in PowerCLI-Ausgabe umwandeln möchten, die GUI-Aktivität aufzeichnen, indem Sie den Aufzeichnen-Button drücken.

Der rote Aufzeichnen-Button wird neben Ihrem angemeldeten Benutzerbereich von vCenter angezeigt, sodass Sie jederzeit aufzeichnen können.
Um die Codeerfassung zu demonstrieren, gehen Sie durch den Assistenten zur Erstellung einer neuen virtuellen Maschine.
- Klicken Sie auf die Schaltfläche Aufzeichnen, um mit der Aufzeichnung zu beginnen. Dadurch beginnt die rote Schaltfläche Aufzeichnen zu pulsieren.
- Klicken Sie mit der rechten Maustaste auf Ihren VMware-Host und erstellen Sie eine neue virtuelle Maschine. Führen Sie den resultierenden Assistenten durch, um eine neue virtuelle Maschine mit allen Standardwerten zu erstellen.
- Sobald die virtuelle Maschine erstellt ist, klicken Sie auf die Aufnahmeschaltfläche und beenden Sie die Aufzeichnung.
Die resultierende Ausgabe kann etwas umfangreicher sein als erwartet. Die Ausgabe enthält sogar alle Aktionen zum Durchsuchen der GUI vor der Erstellung der VM. Sie sollten jedoch einen Abschnitt in den Kommentaren sehen, der mit CreateVM_Task
beginnt. Hier beginnt der Code zur Erstellung einer VM.
Nachstehend finden Sie ein Auszug aus der Ausgabe von CreateVM_Task des Assistenten zur Erstellung einer neuen VM in der GUI über die Codeerfassung:

Diese Ausgabe kann ein wenig überwältigend sein, aber sie zeigt Ihnen direkt die Anzahl der Konfigurationsoptionen, die für Ihre virtuellen Maschinen verfügbar sind. Je nach Ihren eigenen Bedürfnissen können Sie jetzt Anpassungen in Ihren eigenen Skripten vornehmen und nach Belieben anpassen.
Das Codeerfassungsprogramm ist nicht nur auf die Erstellung von VMs beschränkt. Es kann auch Code für Netzwerkänderungen, kleine VM-Änderungen oder Hostkonfigurationsänderungen erstellen. Wenn Sie in der Lage sind, die PowerCLI-Ausgabe von GUI-Aktionen zu überprüfen, können Sie auf Ihrem Weg zur Infrastruktur als Code einen Shortcut nehmen.
Zusammenfassung des PowerCLI-Tutorials.
In diesem Artikel haben Sie viele Themen behandelt. Gute Arbeit! Ich hoffe, Sie haben erkannt, welche Möglichkeiten PowerCLI bietet, um VMware-Infrastrukturen zu verwalten.
Es gibt viele Cmdlets in PowerCLI für eine Vielzahl von Produkten, aber wir haben hier nur einige behandelt. Bleiben Sie auf diesem Blog für weitere Artikel zu diesem großartigen Tool!