beheren Adam de Automator

PowerCLI van VMWare wordt de alomtegenwoordige interface voor hypervisor virtualisatie beheerders van ESXi ondersteunde hardware. Leren hoe VMware te beheren via PowerShell en PowerCLI is een sterke aanvulling op uw toolkit. In deze PowerCLI tutorial ga je leren hoe je dat moet doen.

In deze tutorial leert u:

  • de basisprincipes van het verbinden met VMware-infrastructuur met PowerCLI
  • maak uzelf vertrouwd met cmdlets voor het werken met VMware-objecten
  • stel uzelf in staat met de kennis om
  • VMware verder te verkennen via PowerCLI

laten we aan de slag gaan!

inhoudsopgave

wat u moet hebben en weten

voordat u te ver gaat in deze PowerCLI tutorial, is het altijd belangrijk om ervoor te zorgen dat u en ik beide op dezelfde pagina zijn. Voor dit artikel, Ik ga ervan uit dat:

  • u hebt basiservaring met PowerShell. Je hoeft op geen enkele manier een PowerShell expert te zijn, maar elke PowerShell vertrouwdheid die je hebt zal je goed van dienst zijn.
  • u hebt een VMware ESXi host of vCenter appliance voor het verbinden en testen van
  • u werkt op een Windows (of Mac / Linux) werkstation
  • u hebt PowerCLI al geïnstalleerd en bent verbonden. Zo niet, bekijk dan dit PowerCLI installatie artikel.

Ik zal PowerCLI v 11.4.0 gebruiken. Ik zal werken vanaf een Windows 10 werkstation met Windows PowerShell 5.1, maar je bent van harte welkom om PowerShell 6 te gebruiken in plaats van er feature parity voor deze tutorial.

verzamel informatie over ESXi Hosts met PowerCLI

voordat u in de virtuele laag van onze vSphere-omgeving duikt, is het een goed idee om de fysieke hardwarelaag te bekijken. VMware PowerCLI levert een cmdlet direct 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

sinds ik verbonden ben met een vCenter server appliance die twee afzonderlijke ESXi hosts beheert, ik ben voorzien van een aantal basisinformatie over de hosts die worden beheerd. Met de Get-VMHost kunt u de hardware mogelijkheden van uw virtualisatie hosts bekijken. Maar standaard geeft Get-VMHost niet alle informatie terug die het kan.

Als u de Get-VMHost cmdlet pipe naar Format-List, krijgt U console-uitvoer voor alle informatie over de opgegeven hosts.

Get-VMHost | Format-List
Get-VMHost | Format-List

selecteer alleen individuele eigenschappen 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 zal een nog groter beeld worden gegeven van de onderliggende hardware die uw gevirtualiseerde workloads uitvoert. Een deel van de informatie, in het bijzonder, zou zijn:

  • License validation info
  • CPU/geheugen totalen
  • Hardware vendor model
  • DNS hostname

na beoordeling kan dit worden gecompileerd in een CSV-bestand, misschien met behulp van de Export-CSV cmdlet.

het inspecteren van VM ‘ s met PowerCLI

laten we nu in een ander onderwerp in deze PowerCLI tutorial duiken door virtuele hosts te herzien is het beoordelen van welke virtuele machines momenteel aanwezig zijn op een bepaalde ESXi host.

het Get-VM commando is een handig commando dat u kunt gebruiken om VM-informatie te bekijken.

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

De uitvoer van deze cmdlet zal er ongeveer als hieronder uitzien:

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

De uitvoer hierboven geeft een volledige Statuslijst van momenteel draaiende VM ‘ s op een bepaalde host. Als je ervoor kiest om geen individuele host op te geven, zoals ik hierboven heb gedaan, ontvang je een tabel met informatie voor elke volgende host en de VMs op elke host.

Als u ooit een probleem oplost en het aantal virtuele machines op een bepaalde host wilt weten of als u VMware PowerCLI wilt gebruiken om ESXi-hostinformatie te verzamelen, kunt u deze cmdlets in de toekomst gebruiken. De rapporteringsfunctionaliteit die u binnen handbereik hebt, begint 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, is er een volledig scala aan netwerk-cmdlets voor elk gebruik. Als u de virtuele switches wilt zien die in uw vSphere-omgeving zijn geconfigureerd, gebruikt u het volgende:

PS51> Get-VirtualSwitch

afhankelijk van het aantal virtuele netwerken en virtuele switches dat u hebt, kan uw resulterende lijst vrij groot zijn. In mijn geval, zoals je hieronder ziet, Ik heb een enkele DSwitch die een gedistribueerde virtuele Switch.

in een Enterprise vSphere-implementatie waar er veel ESXi-hosts in een cluster zijn, vereenvoudigen DSwitches de implementatie van virtuele switches en poortgroepen over een groot aantal hosts met dezelfde configuratie. Dit bespaart op de handmatige arbeid van het creëren van identieke netwerkconfiguraties op elke host handmatig, en is een geweldige manier om uw cluster schaal!

Get-VirtualSwitch

het vinden van VM ’s die zijn aangesloten op een virtueel netwerk met PowerCLI

terwijl wordt geprobeerd de scope van een probleem, kunt u zich afvragen welke VM’ s zijn verbonden met welke netwerken. Om dat uit te zoeken, kunt u het commando Get-VirtualPortGroup gebruiken. Laten we leren over deze cmdlet in deze PowerCLI tutorial.

een poortgroep is in wezen een virtueel netwerk. Om alle poortgroepen weer te geven, voer je Get-VirtualPortGroup uit zonder parameters. Je zou dan een lijst moeten zien van alle virtuele port groepen die aanwezig zijn in je vSphere omgeving.

Get-VirtualPortGroup

om alle VM ‘ s binnen die portgroep (dportgroup in mijn geval) te vinden, kunt u de onder het script. Zorg ervoor dat u de waarde DPortGroup vervangt door de naam van uw virtuele poort Groep.

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 bestaan in dit vCenter apparaat, en filteren vervolgens met de Where-Object cmdlet om alleen die VM ‘ s te krijgen met een netwerknaam die overeenkomt met onze Poortgroep.

VM ' s ophalen met alleen een specifieke poortgroep

Met deze uitvoer kunt u bepalen welke machines zijn verbonden en geconfigureerd voor elk netwerk.

wanneer u wordt gevraagd om te lokaliseren en te analyseren welke VM ‘ s zijn verbonden met een bepaald netwerk in VMware, krijgt u nu de bevoegdheid om een PowerCLI-rapportageoplossing voor deze vraag te bieden.

het verkrijgen van OS versie informatie op uw VM ‘ s met PowerCLI

het grootste deel van het administratieve werk binnen VMware wordt gedaan op het niveau van de virtuele machine. U zult waarschijnlijk talloze verzoeken ontvangen voor taken zoals het ophalen van een lijst met alle harde schijfformaten op VM ‘ s of het verkrijgen van Gast OS-versies voor onder andere al uw servers.

deze taken zijn op grote schaal omslachtig. PowerCLI is in staat om deze te stroomlijnen met een paar belangrijke cmdlets toe te voegen aan je arsenaal, dus laten we ze behandelen in deze PowerCLI tutorial.

op een gegeven moment is u misschien gevraagd: “hoeveel Ubuntu-servers hebben we in ons VMware-cluster?”. Je zou dan veel te veel tijd hebben besteed aan het klikken rond in vCenter op zoek naar een antwoord. PowerCLI kan dit proces stroomlijnen door naar de VM-objecten in vCenter te kijken en wat PowerShell-magie op de uitvoer toe te passen.

bekijk het volgende script dat VM-informatie samenbrengt. Dit fragment gebruikt het Get-View Commando waar we iets later op ingaan, maar voor nu moet u weten dat het een geavanceerde manier is om VMware objecteigenschappen op te halen. In dit geval verzamelen we geneste eigenschappen die het gemakkelijkst worden opgehaald in 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 is het ophalen van een lijst van virtuele machines via de PowerCLI Get-VM cmdlet, Sorteren die lijst met de PowerShell Sort-Object cmdlet, en vervolgens het ophalen van een aantal van de objecteigenschappen met behulp van de PowerCLI Get-View cmdlet.

Dit uitvoeren in mijn omgeving levert het onderstaande resultaat op. U kunt de naam van de VM zien in vCenter, de Configured OS dat is hoe de virtuele hardware van VMware is ingesteld om het gastbesturingssysteem te interpreteren, en de werkelijke Running OS dat het werkelijke besturingssysteem vertegenwoordigt.

VM 's vinden op basis van verschillende criteria
VM’ s vinden op basis van verschillende criteria

als de VMS-replicant en Scriptrunner zijn uitgeschakeld in het cluster, zult u niet kunnen zien de Running OS waarde voor hen. Het besturingssysteem wordt verzameld door de VMware Tools service. Als deze niet beschikbaar is, kan PowerCLI de informatie over het besturingssysteem niet ophalen.

CSV-rapporten maken met PowerCLI

VMware Tools is een in-guest service voor zowel Windows als Linux VM ‘ s die de hypervisor aanvullende informatie en beheermogelijkheden biedt. Meestal zal dit zorgen voor clean-shutdown, besturingssysteem informatie, en hogere resolutie console weergave van de VMs.

een handige manier om deze informatie te rapporteren en te verstrekken is door het bovenstaande script naar de Export-CSV cmdlet te pipen. Export-Csv zal een CSV-bestand aanmaken met dezelfde informatie als in de 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, moet u in staat zijn om het CSV-bestand te openen met Excel om het rapport te bekijken.

CSV-bestand van VM informatie
CSV-bestand van VM informatie

de Inspectie van Virtuele Harde Schijven met PowerCLI

De Get-Harddisk commando is een andere nuttige commando om te weten. Met deGet-HardDisk cmdlet kunt u informatie over virtuele harde schijven die aan VMs zijn gekoppeld, inspecteren.

Als u bijvoorbeeld informatie wilt opvragen over de virtuele harde schijf die is gekoppeld aan de Exchange 1 VM ‘ s, kunt u het volgende uitvoeren::

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
informatie opvragen over de virtuele harde schijf verbonden aan de Exchange 1 VMs

sommige van deze informatie kan redundant zijn, zoals de capaciteit in KB vs.GB. Maar er is waarde in het kennen van de StorageFormat (thin/thick provisioning types). 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.

virtuele netwerkadapters inspecteren met PowerCLI

naast het bekijken van de harde schijf informatie van uw virtuele machines, kunt u ook de virtuele netwerkadapters controleren. Om deze eigenschappen voor een enkele VM te controleren, kunt u de Get-NetworkAdpter cmdlet gebruiken.

PS51> Get-NetworkAdapter -VM myVM

terwijl u eerder had gejaagd in deze poort voor alle VM ‘ s die zich in hetzelfde netwerk bevinden, wilt u deze keer alleen de adapters zien die verbonden zijn met een bepaalde VM.

Get-NetworkAdapter
Get-NetworkAdapter

Dit is nuttig bij het oplossen van problemen met VM ‘ s die meerdere netwerkadapters hebben aangesloten. U kunt snel en in één oogopslag bepalen of deze adapters zijn aangesloten op de juiste netwerken.

het uitvoeren van PowerShell-Scripts in VM ’s met Invoke-VMScript

met Invoke-VMScript kunt u PowerShell-code ook direct in de VM uitvoeren; er is geen netwerkverbinding nodig. Als je ooit PowerShell Direct hebt gebruikt in een Hyper-V omgeving, zal dit een soortgelijke ervaring zijn.

in plaats van een PowerShell Remoting sessie aan te maken of de Invoke-Command cmdlet over het netwerk te gebruiken, kan de Invoke-VMScript cmdlet opdrachten rechtstreeks naar de VM verzenden zonder normale WinRM-of SSH-connectiviteit.

als voorbeeld, misschien wilt u een eenvoudige directory listing uitvoeren op een VM genaamd exchange1. Om dit te doen, zou u dir C:\ doorgeven als de waarde voor de parameter ScriptText zoals hieronder getoond.

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

de resultaten zijn alsof u de commando ‘ s van de VM console zelf hebt uitgevoerd. Invoke-VMScript geeft dan alle uitvoer door van het commando dat werd uitgevoerd op de VM.

inroepen-VMScript
inroepen-VMScript

hoewel dit een basisvoorbeeld is, kunt u zo ingewikkeld worden als u wilt. Met deze PowerCLI cmdlet kunt u batch -, PowerShell-of Bash-typen opgeven binnen de parameter ScriptText.

u kunt ook geavanceerder worden. Hieronder kunt u zien hoe u Invoke-VMScript gebruikt om PowerShell-code uit te voeren met behulp van een aparte $script variabele voor de ScriptText parameter input. Dit stelt ons in staat om meer aangepaste scriptinvoer te maken voor de VM om te verwerken.

PS51> $script = 'Get-Disk'$guestCredential = Get-CredentialInvoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential -ScriptType Powershell

de ScriptText parameter waarde heeft een string nodig. Dit is de reden waarom de variabele $script de single-outer-quotes als een noodzaak heeft.

u hebt mogelijk ook het gebruik van de GuestCredential parameter opgemerkt. Deze parameter wordt gebruikt om te verifiëren bij het VM-besturingssysteem. Deze parameter is vooral handig als je het script als een ander account wilt draaien.

uw script in actie moet resulteren in uitvoer zoals hieronder.

het draaien van een script op een VM met Invoke-VMScript

het resultaat van dit script geeft ons de VM ‘ s schijfinformatie. Gebaseerd op dat, zou je moeten weten dat het een remote VM is vanwege de VMware Virtual Disk als de beschrijvende naam van het station.

Geavanceerd worden met Get-View

u hebt mogelijk enkele van de basis cmdlets een eigenschap zien retourneren met de naam ExtensionData. U kunt deze eigenschap vinden door veel PowerCLI cmdlets door te leidingen naar de PowerShell Get-Member cmdlet. Als je je afvraagt wat dat was, nu is je kans om het uit te zoeken.

de volgende stap in deze onderneming is het begrijpen van de Get-View cmdlet. VMware PowerCLI maakt gebruik van veel verschillende queries aan de VM om de mooie en eenvoudige uitvoer van Get-VMte leveren. Maar er is veel onder de motorkap dat alleen toegankelijk is met behulp van de Get-View cmdlet.

u zult waarschijnlijk veel scripts zien met deze cmdlet. Het zou je betaamt om wat tijd te besteden aan het zien van deze cmdlet in actie. Om vertrouwd te raken, gebruik je de Get-View cmdlet om wat virtuele machine informatie te krijgen (Exchange 1 in dit voorbeeld).

u kunt de Filter opties van deze cmdlet zien die het gebruik van een PowerShell hashtable en niet individuele tekenreekswaarden vereisen. Wees bewust bij het bouwen van uw eigen unieke scripts!

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

het resultaat van het bovenstaande commando is veel geneste configuratie-informatie en methodeopties voor het nemen van acties tegen de VM of het verkrijgen van objecteigenschappen.

Get-View
Get-View

Als u hetzelfde script hierboven gebruikt en de uitvoer naar een variabele verzendt, kunt u deze geneste opties inspecteren met puntnotatie. Hier kunt u al die aanvullende informatie van het gastbesturingssysteem zien en ophalen, waarover u mogelijk via PowerCLI wilt rapporteren.

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}PS51> $VM.Guest
Get-View gebruiken met de Filterparameter
Get-View gebruiken met de Filterparameter

om een enkele eigenschap te selecteren. Als dat zo is, kunt u het volgende uitvoeren om een individuele waarde te beperken.

PS51> $VM.Guest.GuestFullName

er zijn veel Get-View opties voor alle typen VMware-objecten. Voel je vrij om al deze opties te verkennen en bekijk dit informatieve artikel van VMware dat gaat in de diepte op deze krachtige cmdlet!

VMware Code Capture-leer van uw klikken

als u gebruik wilt maken van PowerCLI, maar liever geen code wilt bouwen door te typen, is Code Capture in vCenter hier voor u. Code Capture is een nieuwe ontwikkelaarstool die op dezelfde manier werkt als het Beheerderscentrum voor Active Directory. Laten we codevastlegging behandelen in deze PowerCLI tutorial.

deze tool registreert alle acties die u onderneemt binnen de GUI. Het transformeert dan al die acties en biedt u met PowerCLI scripts.

standaard is het vastleggen van Code niet ingeschakeld. Om het aan te zetten opent u uw vCenter –apparaat en navigeert u naar Menu – > Developer Center zoals hieronder weergegeven.

navigeren naar het menu-item van het ontwikkelaarscentrum in vSphere
navigeren naar het menu-item van het ontwikkelaarscentrum in vSphere

eenmaal op het tabblad ontwikkelaarscentrum, schakelt u de optie Code Capture inschakelen in.

Enabling code capture
Enabling code capture

wanneer u code Capture inschakelt, ziet u een rode recordknop in uw vCenter-header. Eenmaal ingeschakeld, wanneer u een actie wilt laten opnemen en omzetten in PowerCLI-uitvoer, moet u de GUI-activiteit opnemen door op de opnameknop te drukken.

Code capture enabled indicator
Code capture enabled indicator

De rode opnameknop verschijnt naast uw ingelogde gebruikerssectie van vCenter, zodat u nu op elk gewenst moment kunt opnemen.

om het vastleggen van Code te demonstreren, gaat u door de wizard Nieuwe virtuele Machine maken.

  1. klik op de knop Opnemen om de opname te starten. Dit zal ervoor zorgen dat de rode opnameknop begint te pulsen.
  2. Klik met de rechtermuisknop op uw VMware-host en maak een nieuwe virtuele Machine aan. Voer de resulterende wizard uit en maak een nieuwe virtuele machine met alle standaardwaarden.
  3. zodra de virtuele machine is aangemaakt, klikt u op de knop Opnemen en stopt u de opname.

de resulterende output kan iets uitgebreider zijn dan verwacht. De uitvoer bevat zelfs alle acties van het bladeren door de GUI voordat u de VM maakt. Maar u zou een sectie moeten zien die aangegeven wordt in de commentaren die beginnen met CreateVM_Task. Hier begint de code een VM aan te maken.

Hieronder is een gedeelte van de CreateVM_Task uitvoer van het nieuwe VM Wizard proces in de GUI via Code Capture:

Developer Center gegenereerde code

deze uitvoer kan een beetje overweldigend zijn, maar het stelt u direct bloot aan het aantal beschikbare configuratieopties voor uw virtuele machines. Afhankelijk van je eigen behoeften, ben je nu bevoegd om aanpassingen te maken in je eigen scripts en aan te passen naar hartenlust.

Het programma Code Capture is niet beperkt tot het maken van VM ‘ s. Het kan ook code bouwen voor netwerkwijzigingen, kleine VM-wijzigingen of hostconfiguratiewijzigingen. Door de PowerCLI-uitvoer van GUI-acties te kunnen bekijken, kunt u een snelkoppeling nemen op uw reis naar infrastructuur die als code wordt ingezet.

samenvatting van de PowerCLI-Tutorial

In dit artikel hebt u een groot aantal onderwerpen behandeld. Goed gedaan! Ik hoop dat je de kracht hebt gerealiseerd die PowerCLI met zich meebrengt voor het beheren van VMware-infrastructuur.

Er zijn veel cmdlets in PowerCLI voor een breed scala aan productbasissen, maar we hebben er hier slechts een paar behandeld. Zorg ervoor dat u op de hoogte blijven van deze blog voor meer artikelen over deze geweldige tool!

verder lezen

  • downloaden en installeren van PowerCLI
  • officiële VMware PowerCLI docs

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.