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 Ihres Toolkits. In diesem PowerCLI-Tutorial erfahren Sie, wie Sie genau das tun.
In diesem Tutorial lernen Sie:
- die Grundlagen der Verbindung zur VMware-Infrastruktur mit PowerCLI
- Machen Sie sich mit Cmdlets für die Arbeit mit VMware-Objekten vertraut
- Befähigen Sie sich mit dem Wissen, VMware über PowerCLI weiter zu verwalten
Los geht’s!
Inhaltsverzeichnis
Was Sie haben und wissen müssen
Bevor Sie in diesem PowerCLI-Tutorial zu weit kommen, ist es immer wichtig sicherzustellen, dass Sie und ich uns beide auf derselben Seite befinden. Für diesen Artikel gehe ich davon aus, dass:
- Sie haben grundlegende PowerShell-Erfahrung. Sie müssen auf keinen Fall ein PowerShell-Experte sein, aber jede PowerShell-Vertrautheit, die Sie haben, wird Ihnen gute Dienste leisten.
- Sie haben einen VMware ESXi-Host oder eine vCenter Appliance zum Verbinden und Testen
- Sie arbeiten an einer Windows-Workstation (oder Mac / Linux)
- Sie haben PowerCLI bereits installiert und sind verbunden. Wenn nicht, lesen Sie diesen PowerCLI-Installationsartikel.
Ich werde PowerCLI v 11.4.0 verwenden. Ich werde von einer Windows 10-Workstation mit Windows PowerShell 5 arbeiten.1, aber Sie können gerne PowerShell 6 stattdessen verwenden, da es Feature-Parität für dieses Tutorial gibt.
Sammeln Sie Informationen über ESXi-Hosts mit PowerCLI
Bevor Sie in die virtuelle Schicht unserer vSphere-Umgebung eintauchen, sollten Sie die physische Hardwareschicht überprüfen. VMware PowerCLI stellt zu diesem Zweck direkt ein Cmdlet zur Verfügung, um detaillierte Informationen mit dem Namen Get-VMHost
zu sammeln.
Führen Sie das folgende Cmdlet aus, während Sie mit Ihrem vCenter Server- oder ESXi-Host verbunden sind.
PS51> Get-VMHost
Da ich mit einer vCenter Server Appliance verbunden bin bei der Verwaltung von zwei separaten ESXi-Hosts erhalten Sie einige grundlegende Informationen zu den zu verwaltenden Hosts. Mit Get-VMHost
können Sie die Hardwarefunktionen Ihrer Virtualisierungshosts überprüfen. Standardmäßig gibt Get-VMHost
jedoch nicht alle Informationen zurück, die es kann.
Wenn Sie das Get-VMHost
Cmdlet an Format-List
, erhalten Sie eine Konsolenausgabe für alle Informationen zu den angegebenen Hosts.
Alternativ können Sie wählerischer sein und nur einzelne Eigenschaften des VMHost-Objekts, mit dem Sie arbeiten, wie:
PS51> Get-VMHost | format-list -Property State,LicenseKey,Version
Wenn Sie diese ausführlichere Ausgabe nutzen, 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:
- License validation info
- CPU/Memory totals
- Hardware vendor model
- DNS hostname
Nach der Überprüfung kann dies in eine CSV-Datei kompiliert werden, möglicherweise mit dem Export-CSV
Cmdlet.
Überprüfen von VMs mit PowerCLI
Lassen Sie uns nun in ein anderes Thema in diesem PowerCLI-Lernprogramm durch Überprüfen virtueller Hosts eintauchen: Überprüfen, welche virtuellen Maschinen derzeit auf einem bestimmten ESXi-Host vorhanden sind.
Der Befehl Get-VM
ist ein praktischer Befehl, mit dem Sie VM-Informationen überprüfen können.
PS51> Get-VMHost -Name <Host FQDN> | Get-VM
Die Ausgabe dieses Cmdlets sieht ungefähr so aus:
Die obige Ausgabe enthält eine vollständige Statusliste der aktuell 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 und die Anzahl der virtuellen Maschinen auf einem bestimmten Host kennen müssen oder VMware PowerCLI zum Sammeln von ESXi-Hostinformationen verwenden müssen, können Sie diese Cmdlets in Zukunft verwenden. Die Berichtsfunktionalität, die Sie zur Hand haben, beginnt sich zu erweitern!
Überprüfen virtueller 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 vollständige Palette von Netzwerk-Cmdlets für jeden Anwendungsfall. Wenn Sie die virtuellen Switches in Ihrer vSphere-Umgebung konfiguriert sehen möchten, verwenden Sie Folgendes:
PS51> Get-VirtualSwitch
Abhängig von der Anzahl der virtuellen Netzwerke und virtuellen Switches, die Sie haben, kann die resultierende Liste ziemlich groß sein. In meinem Fall habe ich, wie Sie unten sehen, einen einzelnen DSwitch, der ein verteilter virtueller Switch ist.
In einer Enterprise vSphere-Implementierung mit vielen ESXi-Hosts in einem Cluster vereinfachen DSwitches die Bereitstellung virtueller Switches und Portgruppen auf einer Vielzahl von Hosts mit derselben Konfiguration. Dies erspart die manuelle Erstellung identischer Netzwerkkonfigurationen auf jedem Host manuell und ist eine großartige Möglichkeit, Ihren Cluster zu skalieren!
Finden von VMs, die mit PowerCLI an ein virtuelles Netzwerk angeschlossen sind
Beim Versuch, die aufgrund eines Problems fragen Sie sich möglicherweise, welche VMs mit welchen Netzwerken verbunden sind. Um das herauszufinden, können Sie den Befehl Get-VirtualPortGroup
. In diesem PowerCLI-Lernprogramm erfahren Sie mehr über dieses Cmdlet.
Eine Portgruppe ist im Wesentlichen ein virtuelles Netzwerk. Um alle Portgruppen anzuzeigen, führen Sie Get-VirtualPortGroup
ohne Parameter aus. Sie sollten dann eine Liste aller in Ihrer vSphere-Umgebung vorhandenen virtuellen Portgruppen sehen.
Um alle VMs innerhalb dieser Portgruppe (in meinem Fall DPortGroup) zu finden, können Sie das folgende Skript ausführen. Ersetzen Sie den Wert DPortGroup durch den Namen Ihrer virtuellen Portgruppe.
PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}
In diesem Einzeiler erhalten wir eine Liste aller virtuellen Maschinen, die in dieser vCenter Appliance vorhanden sind, und filtern dann mit dem Where-Object
Cmdlet, um nur die VMs mit einem Netzwerknamen abzurufen, der unserer Portgruppe entspricht.
Mit dieser Ausgabe können Sie definieren, welche Maschinen für jedes Netzwerk angeschlossen und konfiguriert sind.
Wenn Sie gefragt werden, welche VMs mit einem bestimmten Netzwerk in VMware verbunden sind, können Sie nun eine PowerCLI-Berichtslösung für diese Frage bereitstellen.
Abrufen von Betriebssystemversionsinformationen auf Ihren VMs mit PowerCLI
Der Großteil der administrativen Arbeit in VMware wird auf der Ebene der virtuellen Maschine erledigt. Sie erhalten wahrscheinlich unzählige Anfragen für Aufgaben wie das Abrufen einer Liste aller Festplattengrößen auf VMs oder das Abrufen von Gastbetriebssystemversionen für alle Ihre Server.
Diese Aufgaben sind im Maßstab umständlich. PowerCLI ist in der Lage, diese mit ein paar wichtigen Cmdlets zu rationalisieren, um sie Ihrem Arsenal hinzuzufügen.
Möglicherweise wurden Sie irgendwann gefragt: „Wie viele Ubuntu-Server haben wir in unserem VMware-Cluster?”. Möglicherweise haben Sie dann viel zu viel Zeit damit verbracht, in vCenter nach einer Antwort zu suchen. PowerCLI kann diesen Prozess optimieren, indem es sich die VM-Objekte in vCenter ansieht und PowerShell-Magie auf die Ausgabe anwendet.
Schauen Sie sich das folgende Skript an, das VM-Informationen zusammenfasst. Dieses Snippet verwendet den Befehl Get-View
, auf den wir später eingehen werden, aber im Moment sollten Sie wissen, dass dies eine erweiterte Methode zum Abrufen von VMware-Objekteigenschaften ist. In diesem Fall sammeln wir verschachtelte Eigenschaften, die mit dieser Methode am einfachsten abgerufen werden können.
PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") | Select-Object -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}}
Der obige Code ruft eine Liste virtueller Maschinen über das Cmdlet PowerCLI Get-VM
ab, sortiert diese Liste mit dem Cmdlet PowerShell Sort-Object
und ruft dann einige der Objekteigenschaften mit dem Cmdlet PowerCLI Get-View
Cmdlet.
Wenn Sie dies in meiner Umgebung ausführen, erhalten Sie das folgende Ergebnis. Sie können den Namen der VM in vCenter sehen, die Configured OS
So wird die virtuelle Hardware von VMware so eingestellt, dass sie das Gastbetriebssystem interpretiert, und die tatsächliche Running OS
das repräsentiert das tatsächliche Betriebssystem.
Wenn der VMs-Replikant und Scriptrunner im Cluster ausgeschaltet sind, können Sie keine VMs nach verschiedenen Kriterien siehe den Running OS
Wert für sie. Das Betriebssystem wird vom VMware Tools-Dienst erfasst. Wenn es nicht verfügbar ist, kann PowerCLI die Betriebssysteminformationen nicht abrufen.
Erstellen von CSV-Berichten mit PowerCLI
VMware Tools ist ein In-Guest-Service für Windows- und Linux-VMs, der dem Hypervisor zusätzliche Informationen und Verwaltungsfunktionen bietet. In den meisten Fällen bietet dies ein sauberes Herunterfahren, Betriebssysteminformationen und eine Konsolenansicht der VMs mit höherer Auflösung.
Eine bequeme Möglichkeit, diese Informationen zu melden und bereitzustellen, besteht darin, das obige Skript in das Export-CSV
Cmdlet zu leiten. Export-Csv
erstellt eine CSV-Datei mit denselben Informationen, die Sie in der Konsole sehen.
PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |Select -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}} | Export-CSV C:\report.csv -NoTypeInformation
Nachdem Sie den obigen Code ausgeführt haben, sollten Sie in der Lage sein, die CSV-Datei mit Excel zu öffnen, um den Bericht zu überprüfen.
Überprüfen virtueller Festplatten mit PowerCLI
Die Get-Harddisk
Befehl ist ein weiterer nützlicher Befehl zu wissen. Mit dem Cmdlet Get-HardDisk
können Sie Informationen zu virtuellen Festplatten überprüfen, die an VMs angeschlossen sind.
Um beispielsweise Informationen über die virtuelle Festplatte abzufragen, die an die exchange1-VMs angeschlossen ist, können Sie Folgendes ausführen:
PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
Einige dieser Informationen können redundant sein, z. B. die Kapazität in KB vs. GB. Es ist jedoch sinnvoll, die StorageFormat
(Thin / Thick-Bereitstellungstypen) zu kennen. Und den VMDK-Dateinamen zu kennen.
Wenn beispielsweise ein häufiges Problem auftritt und sich alle VM-Festplatten auf demselben Datenspeichervolume befinden, kann dieses Wissen die Fehlerbehebung beschleunigen.
Überprüfen virtueller Netzwerkadapter mit PowerCLI
Neben der Überprüfung der 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-NetworkAdpter
verwenden.
PS51> Get-NetworkAdapter -VM myVM
Während Sie zuvor in diesem Port nach allen VMs gesucht hatten, die sich im selben Netzwerk befanden, möchten Sie diesmal nur die Adapter sehen, die mit einer bestimmten VM verbunden sind.
Dies ist nützlich bei der Fehlerbehebung bei VMs, an die mehrere Netzwerkadapter angeschlossen sind. Sie können schnell und auf einen Blick feststellen, ob diese Adapter an die richtigen Netzwerke angeschlossen sind.
Ausführen von PowerShell-Skripten in VMs mit Invoke-VMScript
Mit der Invoke-VMScript
können Sie PowerShell-Code auch direkt in der VM ausführen. Wenn Sie PowerShell Direct jemals 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 ohne normale WinRM- oder SSH-Konnektivität direkt an die VM senden.
Als Beispiel möchten Sie vielleicht eine einfache Verzeichnisauflistung auf einer VM namens exchange1 durchführen. Dazu würden Sie dir C:\
als Wert für den Parameter ScriptText
wie unten gezeigt übergeben.
PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"
Die Ergebnisse sind so, als hätten Sie die Befehle von der VM-Konsole selbst ausgeführt. Invoke-VMScript
gibt dann alle Ausgaben weiter, die der auf der VM ausgeführte Befehl zurückgibt.
Obwohl dies ein grundlegendes Beispiel ist, können Sie so kompliziert werden, wie Sie möchten. Mit diesem PowerCLI-Cmdlet können Sie Batch-, PowerShell- oder Bash-Typen im Parameter ScriptText
angeben.
Sie können auch fortgeschrittener werden. Unten sehen Sie, wie Sie Invoke-VMScript
verwenden, um PowerShell-Code mit einer separaten $script
Variablen für die ScriptText
Parametereingabe auszuführen. Auf diese Weise können wir mehr benutzerdefinierte Skripteingaben für die zu verarbeitende VM erstellen.
PS51> $script = 'Get-Disk'$guestCredential = Get-CredentialInvoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential -ScriptType Powershell
Der ScriptText
Parameterwert muss ein String sein. Aus diesem Grund hat die Variable $script
die einfachen äußeren Anführungszeichen als Notwendigkeit.
Möglicherweise haben Sie auch die Verwendung des GuestCredential
-Parameters bemerkt. Dieser Parameter wird verwendet, um sich beim VM-Betriebssystem zu authentifizieren. Dieser Parameter ist besonders nützlich, wenn Sie das Skript als ein anderes Konto ausführen möchten.
Ihr Skript in Aktion sollte zu einer ähnlichen Ausgabe wie unten führen.
Das Ergebnis dieses Skripts liefert uns die Festplatte der VM informationen. Auf dieser Grundlage sollten Sie wissen, dass es sich um eine Remote-VM handelt, da VMware Virtual Disk
der Anzeigename des Laufwerks ist.
Erste Schritte mit Get-View
Möglicherweise haben einige der grundlegenden Cmdlets eine Eigenschaft namens ExtensionData
zurückgegeben. Sie können diese Eigenschaft finden, indem Sie viele PowerCLI-Cmdlets an das PowerShell-Cmdlet Get-Member
. Wenn Sie sich fragen, was das war, ist jetzt Ihre Chance, es herauszufinden.
Der nächste Schritt in diesem Projekt ist das Verständnis des Get-View
Cmdlets. VMware PowerCLI nutzt viele verschiedene Abfragen an die VM, um die hübsche und einfache Ausgabe von Get-VM
bereitzustellen. Aber es gibt eine Menge unter der Haube, auf die nur mit dem Get-View
Cmdlet zugegriffen werden kann.
Sie werden wahrscheinlich viele Skripte sehen, die dieses Cmdlet verwenden. Sie sollten sich einige Zeit daran gewöhnen, dieses Cmdlet in Aktion zu sehen. Um sich vertraut zu machen, verwenden Sie das Cmdlet Get-View
, um einige Informationen zur virtuellen Maschine abzurufen (in diesem Beispiel exchange1).
Die Filter
-Optionen dieses Cmdlets erfordern die Verwendung einer PowerShell-Hashtabelle und nicht einzelner Zeichenfolgenwerte. Seien Sie sich bewusst, wenn Sie Ihre eigenen einzigartigen Skripte erstellen!
PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}
Das Ergebnis des obigen Befehls sind viele verschachtelte Konfigurationsinformationen und Methodenoptionen, um Aktionen gegen die VM auszuführen oder Objekteigenschaften abzurufen.
Wenn Sie dasselbe 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 des Gastbetriebssystems sehen und abrufen, die Sie möglicherweise über PowerCLI melden möchten.
PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}PS51> $VM.Guest
Vielleicht möchten Sie um eine einzelne Eigenschaft auszuwählen. Wenn ja, können Sie Folgendes ausführen, um einen einzelnen Wert einzugrenzen.
PS51> $VM.Guest.GuestFullName
Es gibt viele Get-View
Optionen für alle Arten von VMware-Objekten. Fühlen Sie sich frei, all diese Optionen zu erkunden und diesen informativen Artikel von VMware zu lesen, der ausführlich auf dieses leistungsstarke Cmdlet eingeht!
VMware Code Capture – Lernen Sie von Ihren Klicks
Wenn Sie PowerCLI nutzen möchten, aber lieber keinen Code durch Eingabe erstellen 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-Verwaltungscenter funktioniert. Lassen Sie uns die Codeerfassung in diesem PowerCLI-Lernprogramm behandeln.
Dieses Tool zeichnet alle Aktionen auf, die Sie innerhalb der GUI ausführen. Es wandelt dann alle diese Aktionen um und stellt Ihnen PowerCLI-Skripte zur Verfügung.
Standardmäßig ist die Codeerfassung nicht aktiviert. Um es zu aktivieren, öffnen Sie Ihre vCenter Appliance und navigieren Sie zu Menü –> Developer Center wie unten gezeigt.
Schalten Sie auf der Registerkarte Developer Center die Option Codeerfassung aktivieren um.
Wenn Sie die Codeerfassung aktivieren, wird in Ihrem vCenter-Header eine rote Aufnahmetaste angezeigt. Einmal aktiviert, wann immer Sie möchten, dass eine Aktion aufgezeichnet und in PowerCLI-Ausgabe umgewandelt wird, müssen Sie die GUI-Aktivität aufzeichnen, indem Sie auf die Schaltfläche Aufzeichnen klicken.
Die rote Aufnahmetaste wird neben Ihrem angemeldeten Benutzerbereich von vCenter angezeigt, sodass Sie jetzt jederzeit aufzeichnen können.
Um die Codeerfassung zu demonstrieren, gehen Sie durch den Assistenten zum Erstellen einer neuen virtuellen Maschine.
- Klicken Sie auf die Aufnahmetaste, um mit der Aufnahme zu beginnen. Dadurch beginnt die rote Aufnahmetaste 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 und erstellen Sie eine neue virtuelle Maschine mit allen Standardwerten.
- Sobald die virtuelle Maschine erstellt wurde, klicken Sie auf die Schaltfläche Aufzeichnen und stoppen Sie die Aufzeichnung.
Die resultierende Ausgabe kann etwas ausführlicher sein als erwartet. Die Ausgabe enthält sogar alle Aktionen zum Durchsuchen der GUI vor dem Erstellen der VM. Sie sollten jedoch einen Abschnitt sehen, der in den Kommentaren mit CreateVM_Task
. Hier beginnt der Code zum Erstellen einer VM.
Nachfolgend finden Sie einen Teil der Ausgabe von CreateVM_Task des neuen VM-Assistenten in der GUI über die Codeerfassung:
Diese Ausgabe kann ein wenig überwältigend sein, aber es macht Sie direkt auf die Anzahl der Konfigurationsoptionen zur Verfügung, um Ihre virtuellen Maschinen. Abhängig von Ihren eigenen Bedürfnissen können Sie jetzt Anpassungen in Ihren eigenen Skripten vornehmen und nach Herzenslust anpassen.
Das Dienstprogramm zur Codeerfassung ist nicht nur auf die VM-Erstellung beschränkt. Es kann auch Code für Netzwerkänderungen, kleine VM-Änderungen oder Hostkonfigurationsänderungen erstellen. Indem Sie die PowerCLI-Ausgabe von GUI-Aktionen überprüfen können, können Sie eine Abkürzung auf Ihrem Weg zur als Code bereitgestellten Infrastruktur nehmen.
Zusammenfassung des PowerCLI-Tutorials
In diesem Artikel haben Sie viel Boden gutgemacht. Gute Arbeit! Ich hoffe, dass Sie die Leistungsfähigkeit von PowerCLI für die Verwaltung der VMware-Infrastruktur erkannt haben.
Es gibt viele Cmdlets in PowerCLI für eine Vielzahl von Produktbasen, aber wir haben hier nur einige behandelt. Achten Sie darauf, in diesem Blog für weitere Artikel über dieses tolle Tool abgestimmt zu bleiben!
Weitere Informationen
- Herunterladen und Installieren von PowerCLI
- Offizielle VMware PowerCLI-Dokumente