PowerCLI Tutorial: Beheer VMware-infrastructuur

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.

PS51> Get-VMHost
Get-VMHost

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:

PS51> Get-VMHost | format-list -Property State,LicenseKey,Version

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.

PS51> Get-VMHost -Name <Host FQDN> | Get-VM

De uitvoer van deze cmdlet ziet er ongeveer zo uit:

PS51> Get-VMHost -Name | Get-VM

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:

PS51> Get-VirtualSwitch

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!

Get-VirtualSwitch

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.

Get-VirtualPortGroup

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.

PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}

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.

Getting VMs with only a specific port group

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.

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}}

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.

Finding VMs based on various criteria

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.

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 

Na het uitvoeren van de bovenstaande code, zou u het CSV-bestand moeten kunnen openen met Excel om het rapport te bekijken.

CSV file of VM information

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:

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
Querying information about the virtual hard disk attached to the exchange1 VMs

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.

PS51> Get-NetworkAdapter -VM myVM

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.

Get-NetworkAdapter

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.

PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"

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.

Invoke-VMScript

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.

PS51> $script = 'Get-Disk'

$guestCredential = Get-Credential

Invoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential  -ScriptType Powershell

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.

Running a script on a VM with Invoke-VMScript

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!

PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}

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.

Get-View

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.

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}
PS51> $VM.Guest
Using Get-View with the Filter Parameter

Misschien wil je een enkele eigenschap selecteren. Zo ja, dan kun je het volgende uitvoeren om een individuele waarde te verkleinen.

PS51> $VM.Guest.GuestFullName

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.

Navigating to the Developer Center menu item in vSphere

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

Enabling code capture

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.

Code capture enabled indicator

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.

  1. Klik op de Opnemen knop om te beginnen met opnemen. Hierdoor begint de rode Opnemen knop te knipperen.
  2. 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.
  3. 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:

Developer Center generated code

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!

Verder Lezen

Source:
https://adamtheautomator.com/powercli-tutorial/