PowerCLI van VMWare wordt de alomtegenwoordige interface voor hypervisorvirtualisatiebeheerders van ESXi-ondersteunde hardware. Het leren beheren van VMware via PowerShell en PowerCLI is een waardevolle toevoeging aan je toolkit. In deze PowerCLI-zelfstudie ga je precies dat leren.
In deze zelfstudie leer je:
- de basisprincipes van het verbinden met VMware-infrastructuur met PowerCLI
- jezelf vertrouwd maken met cmdlets voor het werken met VMware-objecten
- jezelf kracht geven met de kennis om
- VMware verder te beheren via PowerCLI
Laten we eraan beginnen!
Wat je nodig hebt en moet weten
Voordat je te ver gaat in deze PowerCLI-zelfstudie, is het altijd belangrijk om ervoor te zorgen dat jij en ik op dezelfde pagina zitten. Voor dit artikel ga ik ervan uit dat:
- Je basiskennis hebt van PowerShell.Je hoeft geen PowerShell-expert te zijn, maar enige bekendheid met PowerShell zal je goed van pas komen.
- Je een VMware ESXi-host of vCenter-appliance hebt om verbinding mee te maken en te testen
- Je werkt op een Windows (of Mac / Linux) werkstation
- Je PowerCLI al hebt geïnstalleerd en verbonden bent. Zo niet, bekijk dan dit artikel over PowerCLI-installatie.
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.
Informatie verzamelen over ESXi-hosts met PowerCLI
Voordat u zich verdiept in de virtuele laag van onze vSphere-omgeving, is het een goed idee om de fysieke hardwarelaag te bekijken. VMware PowerCLI biedt een cmdlet specifiek voor dit doel, om gedetailleerde informatie te verzamelen genaamd Get-VMHost
.
Terwijl u verbonden bent met uw vCenter-server of ESXi-host, voert u de volgende cmdlet uit.

Aangezien ik verbonden ben met een vCenter Server Appliance die twee afzonderlijke ESXi-hosts beheert, krijg ik enkele basisinformatie over de beheerde hosts. Met Get-VMHost
kunt u de hardwarecapaciteiten van uw virtualisatiehosts bekijken. Maar standaard retourneert Get-VMHost
niet alle informatie die het kan.
Als u de Get-VMHost
-cmdlet doorgeeft aan Format-List
, krijgt u de console-uitvoer voor alle informatie over de gegeven hosts.

Get-VMHost | Format-List
Als alternatief kunt u kieskeuriger zijn en alleen individuele eigenschappen selecteren op het VMHost-object waarmee u werkt, zoals:
Door gebruik te maken van deze meer uitgebreide uitvoer krijgt u een nog beter beeld van de onderliggende hardware waarop uw gevirtualiseerde workloads worden uitgevoerd. Enkele van de informatie die met name nuttig kan zijn, is:
- Informatie over licentievalidatie
- Totaal aantal CPU’s/geheugen
- Model van de hardwareleverancier
- DNS-hostnaam
Na het bekijken van deze informatie kan dit worden samengevoegd in een CSV-bestand, mogelijk met behulp van de Export-CSV
-cmdlet.
Inspectie van VM’s met PowerCLI
Laten we nu een ander onderwerp bespreken in deze PowerCLI-handleiding door te bekijken welke virtuele machines momenteel aanwezig zijn op een bepaalde ESXi-host.
De Get-VM
-opdracht is een handige opdracht die je kunt gebruiken om VM-informatie te bekijken.
De uitvoer van deze cmdlet ziet er ongeveer zo uit:

De bovenstaande uitvoer biedt een volledige statuslijst van momenteel actieve VM’s op een gegeven host. Als je ervoor zou kiezen om geen individuele host te specificeren, zoals ik hierboven heb gedaan, ontvang je een tabel met informatie voor elke volgende host en de VM’s op elk.
Als je ooit een probleem aan het oplossen bent en het aantal virtuele machines op een bepaalde host moet weten, of als je VMware PowerCLI moet gebruiken om ESXi-hostinformatie te verzamelen, kun je deze cmdlets in de toekomst gebruiken. De rapportagemogelijkheden die je tot je beschikking hebt, beginnen zich uit te breiden!
Inspecteren van Virtuele Switches met PowerCLI
Voor degenen onder ons die belast zijn met het configureren of beheren van de virtuele netwerken van een vCenter-cluster, zijn er een hele reeks netwerk-cmdlets voor elk gebruiksscenario. Als je de geconfigureerde virtuele switches in je vSphere-omgeving wilt zien, gebruik je het volgende:
Afhankelijk van het aantal virtuele netwerken en virtuele switches dat je hebt, kan je resulterende lijst behoorlijk lang zijn. In mijn geval, zoals je hieronder ziet, heb ik een enkele DSwitch die een Distributed Virtual Switch is.
In een Enterprise vSphere-implementatie waar veel ESXi-hosts in een cluster zijn, vereenvoudigen DSwitches de implementatie van virtuele switches en poortgroepen over een veelheid van hosts met dezelfde configuratie. Dit bespaart op het handmatige werk van het maken van identieke netwerkconfiguraties op elke host handmatig, en is een geweldige manier om je cluster te schalen!

Het vinden van VM’s die zijn verbonden met een virtueel netwerk met PowerCLI
Als je probeert de reikwijdte van een probleem te beperken, vraag je je misschien af welke VM’s zijn verbonden met welke netwerken. Om dat uit te zoeken, kun je de opdracht Get-VirtualPortGroup
gebruiken. Laten we in deze PowerCLI-zelfstudie meer leren over deze 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.

Om alle VM’s binnen die poortgroep (DPortGroup in mijn geval) te vinden, kun je het onderstaande script uitvoeren. Zorg ervoor dat je de waarde DPortGroup vervangt door de naam van je virtuele poortgroep.
In deze one-liner krijgen we een lijst van alle virtuele machines die in dit vCenter-apparaat bestaan, en filteren vervolgens met de Where-Object
cmdlet om alleen die VM’s te krijgen met een netwerknaam die overeenkomt met onze poortgroep.

Met deze uitvoer kun je bepalen welke machines zijn verbonden en geconfigureerd voor elk netwerk.
Wanneer je wordt gevraagd om te lokaliseren en te analyseren welke VM’s zijn verbonden met een specifiek netwerk in VMware, ben je nu in staat om een PowerCLI-rapporteringsoplossing te bieden voor deze vraag.
OS-versie-informatie krijgen van je VM’s met PowerCLI
De meeste administratieve taken binnen VMware worden uitgevoerd op het niveau van de virtuele machine. Je zult waarschijnlijk talloze verzoeken ontvangen voor taken zoals het ophalen van een lijst met alle harde schijf groottes op VM’s of het verkrijgen van de versies van het gastbesturingssysteem voor al je servers, onder andere.
Deze taken zijn op grote schaal tijdrovend. PowerCLI kan dit stroomlijnen met een paar belangrijke cmdlets om toe te voegen aan je arsenaal, laten we ze behandelen in deze PowerCLI-tutorial.
Op een gegeven moment kan je zijn gevraagd: “Hoeveel Ubuntu-servers hebben we in onze VMware-cluster?”. Vervolgens heb je waarschijnlijk veel te veel tijd besteed aan het zoeken naar een antwoord in vCenter. PowerCLI kan dit proces vereenvoudigen door naar de VM-objecten in vCenter te kijken en wat PowerShell-magie toe te passen op de uitvoer.
Bekijk het volgende script dat VM-informatie samenvoegt. Deze snippet gebruikt de Get-View
opdracht waar we later op ingaan, maar voor nu moet je weten dat het een geavanceerde manier is om eigenschappen van VMware-objecten op te halen. In dit geval verzamelen we geneste eigenschappen die het gemakkelijkst kunnen worden opgehaald met deze methode.
De bovenstaande code haalt een lijst van virtuele machines op via de PowerCLI Get-VM
cmdlet, sorteert de lijst met de PowerShell Sort-Object
cmdlet en haalt vervolgens enkele eigenschappen van het object op met behulp van de PowerCLI Get-View
cmdlet.
Als ik dit in mijn omgeving uitvoer, geeft het onderstaand resultaat. Je ziet de naam van de VM in vCenter, de Geconfigureerde OS
wat aangeeft hoe de virtuele hardware van VMware het gastbesturingssysteem moet interpreteren, en het daadwerkelijke Running OS
dat het daadwerkelijke besturingssysteem vertegenwoordigt.

Met de VM’s replicant en Scriptrunner uitgeschakeld in de cluster, zult u de waarde Running OS
niet kunnen zien voor hen. Het besturingssysteem wordt verzameld door de VMware Tools-service. Als het niet beschikbaar is, kan PowerCLI de besturingssysteeminformatie niet ophalen.
Het maken van CSV-rapporten met PowerCLI
VMware Tools is een in-gastservice voor zowel Windows- als Linux-VM’s die de hypervisor aanvullende informatie en beheermogelijkheden biedt. Meestal biedt dit een schone shutdown, besturingssysteeminformatie en een consoleweergave met hogere resolutie van de VM’s.
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.
Na het uitvoeren van de bovenstaande code, zou u het CSV-bestand moeten kunnen openen met Excel om het rapport te bekijken.

Inspectie van virtuele harde schijven met PowerCLI
De opdracht Get-Harddisk
is een andere handige opdracht om te kennen. Met de cmdlet Get-HardDisk
kunt u informatie inspecteren over virtuele harde schijven die aan VM’s zijn gekoppeld.
Om bijvoorbeeld informatie op te vragen over de virtuele harde schijf die is gekoppeld aan de exchange1 VM’s, kunt u het volgende uitvoeren:

Sommige van deze informatie kan overbodig zijn, zoals de capaciteit in KB versus GB. Maar er is waarde in het kennen van het StorageFormat
(dunne/dikke provisioningstypen). En het kennen van de VMDK-bestandsnaam.
Als u bijvoorbeeld een veelvoorkomend probleem ziet en alle VM-harde schijven zich op hetzelfde datastore-volume bevinden, kan deze kennis het oplossen van problemen versnellen.
Inspectie van virtuele netwerkadapters met PowerCLI
Naast het controleren van de harde schijfinformatie van uw virtuele machines, wilt u mogelijk ook de virtuele netwerkadapters controleren. Om deze eigenschappen voor een enkele VM te controleren, kunt u de Get-NetworkAdapter
cmdlet gebruiken.
Hoewel je eerder in deze poort hebt gezocht naar alle VM’s die zich in hetzelfde netwerk bevinden, wil je deze keer alleen de adapters zien die verbonden zijn met een specifieke VM.

Dit is handig als je problemen wilt oplossen met VM’s die meerdere netwerkadapters hebben. U kunt snel en in één oogopslag bepalen of die adapters zijn verbonden met de juiste netwerken.
Het uitvoeren van PowerShell-scripts in VM’s met Invoke-VMScript
Met behulp van de Invoke-VMScript
kunt u ook PowerShell-code rechtstreeks binnen de VM uitvoeren; geen netwerkconnectiviteit vereist. Als u ooit PowerShell Direct hebt gebruikt binnen een Hyper-V-omgeving, zal dit een vergelijkbare ervaring zijn.
In plaats van een PowerShell Remoting-sessie te maken of de Invoke-Command
cmdlet via het netwerk te gebruiken, kan de Invoke-VMScript
cmdlet opdrachten rechtstreeks naar de VM sturen zonder normale WinRM- of SSH-connectiviteit.
Als voorbeeld, misschien wilt u een eenvoudige directorylijst uitvoeren op een VM met de naam exchange1. Om dit te doen, zou u dir C:\
doorgeven als de waarde voor de ScriptText
parameter zoals hieronder getoond.
De resultaten zijn alsof je de commando’s rechtstreeks vanaf de VM-console hebt uitgevoerd. Invoke-VMScript
geeft vervolgens alle output door die het commando dat op de VM is uitgevoerd, retourneert.

Hoewel dit een eenvoudig voorbeeld is, kun je zo ingewikkeld worden als je wilt. Met deze PowerCLI-cmdlet kun je batch-, PowerShell- of Bash-types specificeren binnen de parameter ScriptText
.
Je kunt ook geavanceerder worden. Hieronder zie je hoe je Invoke-VMScript
gebruikt om PowerShell-code uit te voeren met een aparte $script
-variabele voor de invoer van de parameter ScriptText
. Hierdoor kunnen we meer aangepaste scriptinvoer maken voor de VM om te verwerken.
De waarde van de parameter ScriptText
moet een string zijn. Daarom heeft de variabele $script
de enkele buitenste aanhalingstekens als noodzaak.
Je hebt mogelijk ook het gebruik van de parameter GuestCredential
opgemerkt. Deze parameter wordt gebruikt om in te loggen op het besturingssysteem van de VM. Deze parameter is vooral handig als je het script wilt uitvoeren als een ander account.
Je script in actie zou een output moeten opleveren die vergelijkbaar is met hieronder.

Het resultaat van dit script geeft ons de informatie over de schijf van de VM. Op basis daarvan zou je moeten weten dat het een externe VM is vanwege de VMware Virtual Disk
als de vriendelijke naam van de schijf.
Geavanceerd worden met Get-View
Je hebt misschien gemerkt dat sommige van de basis-cmdlets een eigenschap genaamd ExtensionData
retourneren. Je kunt deze eigenschap vinden door veel PowerCLI-cmdlets te pijpen naar de PowerShell Get-Member
cmdlet. Als je je afvroeg wat dat was, is dit je kans om erachter te komen.
De volgende stap in dit avontuur is het begrijpen van de Get-View
cmdlet. VMware PowerCLI maakt gebruik van veel verschillende query’s naar de VM om de mooie en eenvoudige uitvoer van Get-VM
te bieden. Maar er is veel onder de motorkap dat alleen toegankelijk is door de Get-View
cmdlet te gebruiken.
Je zult waarschijnlijk veel scripts zien die deze cmdlet gebruiken. Het zou verstandig zijn om wat tijd te besteden aan het wennen aan het zien van deze cmdlet in actie. Om vertrouwd te raken, gebruik je de Get-View
cmdlet om wat informatie over de virtuele machine te krijgen (exchange1 in dit voorbeeld).
Je kunt zien dat de Filter
-opties van deze cmdlet het gebruik van een PowerShell-hashtable vereisen en geen individuele tekenreeksen. Wees hiervan op de hoogte bij het maken van je eigen unieke scripts!
Het resultaat van het bovenstaande commando is een hoop geneste configuratiegegevens en methodeopties voor het uitvoeren van acties tegen de VM of het verkrijgen van objecteigenschappen.

Als je hetzelfde script als hierboven gebruikt en de uitvoer naar een variabele stuurt, kun je die geneste opties inspecteren met puntnotatie. Hier kun je al die extra informatie van het gastbesturingssysteem zien en ophalen, die je mogelijk via PowerCLI wilt rapporteren.

Misschien wil je een enkele eigenschap selecteren. Zo ja, dan kun je het volgende uitvoeren om een individuele waarde te verkleinen.
Er zijn veel opties voor Get-View
voor alle soorten VMware-objecten. Voel je vrij om al deze opties te verkennen en bekijk dit informatieve artikel van VMware dat diep ingaat op deze krachtige cmdlet!
VMware Code Capture – Leer van je Klikken
Als je van PowerCLI wilt profiteren maar liever geen code typt, is Code Capture in vCenter er voor jou. Code Capture is een nieuwe ontwikkelaarstool die vergelijkbaar werkt met het Active Directory Administrative Center. Laten we Code Capture behandelen in deze PowerCLI-tutorial.
Deze tool neemt alle acties op die je uitvoert binnen de GUI. Het transformeert vervolgens al die acties en levert PowerCLI-scripts aan.
Standaard is Code Capture niet ingeschakeld. Om het in te schakelen, open je je vCenter-appliance en ga je naar Menu -> Developer Center zoals hieronder getoond.

Eenmaal op het tabblad Developer Center, schakel je de optie Enable Code Capture in.

Wanneer je Code Capture inschakelt, zie je een rode Record-knop binnen je vCenter-header. Als het is ingeschakeld, moet je telkens wanneer je een actie wilt opnemen en omzetten in PowerCLI-uitvoer, de GUI-activiteit opnemen door op de opname-knop te drukken.

De rode opname-knop verschijnt naast het gedeelte van je ingelogde gebruiker in vCenter, zodat je nu op elk moment kunt opnemen.
Om Code Capture te demonstreren, ga door de Nieuwe virtuele machine creatiewizard.
- Klik op de Opnemen knop om te beginnen met opnemen. Hierdoor begint de rode Opnemen knop te knipperen.
- Klik met de rechtermuisknop op uw VMware-host en Maak een nieuwe virtuele machine. Doorloop de resulterende wizard om een nieuwe virtuele machine te maken met alle standaardwaarden.
- Zodra de virtuele machine is gemaakt, klik op de opnameknop en stop met opnemen.
De resulterende uitvoer kan iets uitgebreider zijn dan verwacht. De uitvoer bevat zelfs alle acties van het browsen door de GUI voordat de VM wordt gemaakt. Maar u zou een gedeelte moeten zien dat in de opmerkingen wordt aangeduid met CreateVM_Task
. Hier begint de code met het maken van een VM.
Hieronder volgt een gedeelte van de CreateVM_Task-uitvoer van het proces Nieuwe VM Wizard in de GUI via Code Capture:

Deze uitvoer kan een beetje overweldigend zijn, maar het stelt u direct bloot aan het aantal configuratieopties dat beschikbaar is voor uw virtuele machines. Afhankelijk van uw eigen behoeften, bent u nu in staat om aanpassingen te maken in uw eigen scripts en deze naar hartenlust aan te passen.
De Code Capture-tool is niet alleen beperkt tot het maken van VM’s. Het kan ook code genereren voor netwerk wijzigingen, kleine VM-aanpassingen of host configuratiewijzigingen. Door de PowerCLI-uitvoer van GUI-acties te kunnen bekijken, kunt u een shortcut nemen op uw reis naar infrastructuur die is geïmplementeerd als code.
Samenvatting PowerCLI-zelfstudie
In dit artikel heb je veel terrein bestreken. Goed gedaan! Ik hoop dat je de kracht hebt ingezien die PowerCLI met zich meebrengt bij het beheren van VMware-infrastructuur.
Er zijn veel cmdlets in PowerCLI voor een breed scala aan productbases, maar we hebben hier slechts een paar behandeld. Blijf op de hoogte van deze blog voor meer artikelen over deze geweldige tool!