Adam Automatorn

PowerCLI av VMWare blir det allestädes närvarande gränssnittet för hypervisorvirtualiseringsadministratörer av ESXi-stödd hårdvara. Att lära sig att hantera VMware via PowerShell och PowerCLI är ett starkt tillägg till din verktygslåda. I denna PowerCLI-handledning kommer du att lära dig hur du gör just det.

i denna handledning lär du dig:

  • grunderna för att ansluta till VMware-infrastruktur med PowerCLI
  • bekanta dig med cmdlets för att arbeta med VMware-objekt
  • ge dig själv kunskapen att utforska
  • hantera VMware ytterligare via PowerCLI

Låt oss komma till det!

Innehållsförteckning

vad du behöver ha och veta

innan du kommer för långt i denna PowerCLI-handledning är det alltid viktigt att du och jag är båda på samma sida. För den här artikeln kommer jag att anta att:

  • Du har grundläggande PowerShell erfarenhet. Du behöver inte vara en PowerShell-expert, på något sätt, men någon PowerShell-förtrogenhet du har kommer att tjäna dig bra.
  • Du har en VMware ESXi-värd eller vCenter-apparat för anslutning till och testning
  • du arbetar på en Windows (eller Mac / Linux) arbetsstation
  • Du har PowerCLI redan installerat och är anslutna. Om inte, kolla in den här PowerCLI-installationsartikeln.

Jag använder PowerCLI v 11.4.0. Jag kommer att arbeta från en Windows 10-arbetsstation med Windows PowerShell 5.1, men du är välkommen att använda PowerShell 6 istället eftersom det finns funktionsparitet för denna handledning.

samla information om ESXi-värdar med PowerCLI

innan du dyker in i det virtuella lagret i vår vSphere-miljö är det bra att granska det fysiska hårdvarulagret. VMware PowerCLI tillhandahåller en cmdlet direkt för detta ändamål, för att samla detaljerad information som kallas Get-VMHost.

När du är ansluten till din vCenter-server eller ESXi-värd kör du följande cmdlet.

PS51> Get-VMHost
Get-VMHost
Get-VMHost

eftersom jag är ansluten till en vCenter Server-apparat som hanterar två separata ESXi-värdar, får jag lite grundläggande information om värdarna som hanteras. Med Get-VMHost kan du granska maskinvarufunktionerna för dina virtualiseringsvärdar. Men som standard returnerar Get-VMHost inte all information den kan.

om du rörGet-VMHost cmdlet tillFormat-List får du konsolutmatning för all information om de givna värdarna.

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

alternativt kan du vara pickier och bara välja enskilda egenskaper på vmhost-objektet du arbetar med som:

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

utnyttja denna mer utförliga utgång kommer att ge en ännu större bild av den underliggande hårdvaran som kör dina virtualiserade arbetsbelastningar. En del av informationen skulle i synnerhet vara:

  • Licensvalideringsinformation
  • CPU/Memory totals
  • Maskinvaruleverantörsmodell
  • DNS hostname

efter granskning kan detta kompileras till en CSV-fil kanske med Export-CSV cmdlet.

inspektera VM med PowerCLI

låt oss nu dyka in i ett annat ämne i denna PowerCLI-handledning genom att granska virtuella värdar granskar vilka virtuella maskiner som för närvarande finns på en given ESXi-värd.

kommandotGet-VM är ett praktiskt kommando som du kan använda för att granska VM-information.

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

utmatningen från denna cmdlet kommer att se ut som nedan:

PS51 Get-VMHost-namn värd FQDN | Get-VM
PS51> Get-VMHost-namn | Get-VM

utmatningen ovan ger en fullständig statuslista över för närvarande kör VM på en viss värd. Om du skulle välja att inte ange en enskild värd, som jag har gjort ovan, får du en tabell med information för varje efterföljande värd och VM på varje.

Om du någonsin felsöker ett problem och behöver veta antalet virtuella maskiner på en viss värd eller behöver använda VMware PowerCLI för att samla ESXi-värdinformation kan du använda dessa cmdlets framöver. Rapporteringsfunktionen du har till hands börjar expandera!

inspektera virtuella switchar med PowerCLI

För de av oss som är laddade med att konfigurera eller administrera virtuella nätverk i ett vCenter-kluster finns det ett komplett utbud av nätverks-cmdlets för alla användningsfall. Om du vill se de virtuella switcharna konfigurerade i din vSphere-miljö använder du följande:

PS51> Get-VirtualSwitch

beroende på antalet virtuella nätverk och virtuella switchar du har kan din resulterande lista vara ganska stor. I mitt fall, som du ser nedan, har jag en enda DSwitch som är en distribuerad virtuell Switch.

i en Enterprise vSphere-implementering där det finns många ESXi-värdar i ett kluster förenklar DSwitches utplaceringen av virtuella switchar och portgrupper över en mängd värdar med samma konfiguration. Detta sparar manuellt arbete för att skapa identiska nätverkskonfigurationer på varje värd manuellt och är ett utmärkt sätt att skala ditt kluster!

Get-VirtualSwitch
Get-VirtualSwitch

hitta virtuella datorer kopplade till ett virtuellt nätverk med PowerCLI

När du försöker begränsa omfattningen av ett problem kanske du undrar vilka virtuella datorer som är anslutna till vilka nätverk. För att räkna ut det kan du använda kommandot Get-VirtualPortGroup. Låt oss lära oss om denna cmdlet i denna PowerCLI-handledning.

en portgrupp är i huvudsak ett virtuellt nätverk. För att visa alla portgrupper, kör Get-VirtualPortGroup utan några parametrar. Du bör då se en lista över alla virtuella portgrupper som finns i din vSphere-miljö.

Get-VirtualPortGroup
Get-VirtualPortGroup

för att hitta alla virtuella datorer inuti den portgruppen (DPortGroup i mitt fall) kan du köra nedanstående skript. Var noga med att ersätta värdet DPortGroup med namnet på din virtuella Portgrupp.

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

i den här enfodret får vi en lista över alla virtuella maskiner som finns i denna vCenter-apparat och filtrerar sedan med Where-Object cmdlet för att bara få de virtuella datorerna med ett nätverksnamn som matchar vår Portgrupp.

hämta virtuella datorer med endast en specifik portgrupp
hämta virtuella datorer med endast en specifik portgrupp

med den här utgången kan du definiera vilka maskiner är anslutna och konfigurerade för varje nätverk.

När du blir ombedd att hitta och analysera vilka virtuella datorer som är anslutna till ett visst nätverk i VMware kommer du nu att ha befogenhet att tillhandahålla en PowerCLI-rapporteringslösning på denna fråga.

få OS-versionsinformation om dina virtuella datorer med PowerCLI

huvuddelen av det administrativa arbetet inuti VMware görs på virtuell maskinivå. Du kommer sannolikt att få otaliga förfrågningar om uppgifter som att hämta en lista över alla hårddiskstorlekar på VM eller få gäst OS-versioner för alla dina servrar bland andra.

dessa uppgifter är besvärliga i skala. PowerCLI kan effektivisera dessa med några viktiga cmdlets att lägga till i din arsenal så låt oss täcka dem i denna PowerCLI-handledning.

Du kanske har blivit frågad vid någon tidpunkt, ” hur många Ubuntu-servrar har vi i vårt VMware-kluster?”. Du kanske har spenderat alldeles för mycket tid på att klicka runt i vCenter och letar efter ett svar. PowerCLI kan effektivisera denna process genom att titta på VM objekt i vCenter och tillämpa vissa Power magi på utgången.

ta en titt på följande skript som samlar VM-information. Detta utdrag använder kommandotGet-View som vi kommer att gå in lite senare men för tillfället borde du veta att det är ett avancerat sätt att hämta VMware-objektegenskaper. I det här fallet samlar vi in kapslade egenskaper som lättast hämtas i den här metoden.

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

ovanstående kod hämtar en lista över virtuella maskiner via PowerCLI Get-VM cmdlet, sorterar listan med PowerShell Sort-Object cmdlet och hämtar sedan några av objektegenskaperna med PowerCLI Get-View cmdlet.

att köra detta i min miljö ger resultatet nedan. Du kan se namnet på VM i vCenter, Configured OS vilket är hur VMwares virtuella hårdvara är inställd för att tolka gästoperativsystemet och det faktiska Running OS som representerar det faktiska operativsystemet.

hitta virtuella datorer baserade på olika kriterier
hitta virtuella datorer baserade på olika kriterier

med VMs replicant och Scriptrunner är avstängda i klustret, kommer du inte att kunna se Running OS värde för dem. Operativsystemet samlas in av VMware Tools-tjänsten. Om det inte är tillgängligt kan PowerCLI inte hämta operativsysteminformationen.

skapa CSV-rapporter med PowerCLI

VMware Tools är en gästtjänst för både Windows-och Linux-virtuella datorer som ger hypervisorn ytterligare information och administrativa funktioner. Oftast kommer detta att ge ren avstängning, operativsysteminformation och högre upplösning konsolvisning av VM.

ett bekvämt sätt att rapportera om och tillhandahålla denna information skulle vara att pipa ovanstående skript i Export-CSV cmdlet. Export-Csv skapar en CSV-fil med samma information som du ser i konsolen.

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 

När du har kört ovanstående kod bör du sedan kunna öppna CSV-filen med Excel för att granska rapporten.

CSV-fil med VM-information
CSV-fil med VM-information

inspektera virtuella hårddiskar med PowerCLI

kommandot Get-Harddisk är ett annat användbart kommando att veta. Med Get-HardDisk cmdlet kan du inspektera information om virtuella hårddiskar som är anslutna till VM.

till exempel, för att fråga information om den virtuella hårddisken som är ansluten till exchange1 VMs, kan du köra följande:

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
fråga information om den virtuella hårddisken som är ansluten till utbytet1 VMs
Fråga information om den virtuella hårddisken som är ansluten till utbytet1 VMs

en del av denna information kan vara överflödig, till exempel kapaciteten i KB vs. GB. Men det finns värde i att känna till StorageFormat (tunna/tjocka provisioneringstyper). Och att veta VMDK-filnamnet.

till exempel, om du ser ett vanligt problem och alla VM-hårddiskar finns på samma datalagringsvolym, kan denna kunskap påskynda felsökning.

inspektera virtuella nätverksadaptrar med PowerCLI

förutom att granska hårddiskinformation för dina virtuella maskiner kanske du också vill kontrollera de virtuella nätverksadaptrarna. För att kontrollera dessa egenskaper för en enda VM kan du använda Get-NetworkAdpter cmdlet.

PS51> Get-NetworkAdapter -VM myVM

medan du hade jagat tidigare i denna port för alla virtuella datorer som bor i samma nätverk, den här gången vill du bara se adaptrarna anslutna till en viss VM.

Get-NetworkAdapter
Get-NetworkAdapter

detta är användbart om felsökning VM som har flera nätverkskort anslutna. Du kan snabbt och snabbt avgöra om dessa adaptrar är anslutna till rätt nätverk.

Kör PowerShell-skript i VM med Invoke-VMScript

med Invoke-VMScript kan du också köra PowerShell-kod direkt inuti VM; ingen nätverksanslutning krävs. Om du någonsin har använt PowerShell Direct i en Hyper-V-miljö kommer det att bli en liknande upplevelse.

istället för att skapa en PowerShell-Remoting-session eller använda Invoke-Command cmdlet över nätverket, kan Invoke-VMScript cmdlet skicka kommandon direkt till VM utan normal WinRM-eller SSH-anslutning.

som ett exempel kanske du vill utföra en enkel kataloglistning på en VM som heter exchange1. För att göra det skulle du skicka dir C:\ som värdet för parametern ScriptText som visas nedan.

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

resultaten är som om du hade kört kommandona från VM-konsolen själv. Invoke-VMScript sedan reläer alla utdata kommandot som kördes på VM returnerar.

Invoke-VMScript
Invoke-VMScript

även om detta är ett grundläggande exempel kan du bli så komplicerad som du vill. Denna PowerCLI cmdlet låter dig ange batch -, PowerShell-eller Bash-typer inom parametern ScriptText.

Du kan också bli mer avancerad. Nedan kan du se hur du använder Invoke-VMScript för att köra PowerShell-kod med en separat $script variabel för ScriptText parameteringång. Detta gör det möjligt för oss att skapa mer anpassade scriptinmatningar för VM att bearbeta.

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

ScriptText parametervärdet behöver en sträng. Det är därför $script variabeln har de enda yttre citaten som en nödvändighet.

Du kanske också har märkt användningen av parameternGuestCredential. Denna parameter används för att autentisera i VM-operativsystemet. Denna parameter är särskilt användbar om du vill köra skriptet som ett annat konto.

ditt skript i aktion bör resultera i utdata som liknar nedan.

kör ett skript på en VM med Invoke-VMScript
kör ett skript på en VM med Invoke-VMScript

resultatet av detta skript ger oss VM: s diskinformation. Baserat på det borde du veta att det är en avlägsen VM på grund av VMware Virtual Disk som det vänliga namnet på enheten.

komma Avancerad med Get-View

Du kanske har sett några av de grundläggande cmdlets returnera en egenskap som heter ExtensionData. Du kan hitta den här egenskapen genom att pipa många PowerCLI-cmdlets till PowerShell Get-Member cmdlet. Om du undrar vad det var, nu är din chans att ta reda på.

nästa steg i denna satsning är att förstå Get-View cmdlet. VMware PowerCLI utnyttjar många olika frågor till VM för att ge den vackra och enkla utmatningen av Get-VM. Men det finns mycket under huven som bara är tillgängligt genom att använda Get-View cmdlet.

Du kommer sannolikt att se många skript med denna cmdlet. Det skulle behöva dig att spendera lite tid att vänja sig vid att se denna cmdlet i aktion. För att bekanta dig, använd Get-View cmdlet för att få lite virtuell maskininformation (exchange1 i det här exemplet).

Du kan seFilter alternativ för denna cmdlet kräver användning av en PowerShell hashtable och inte enskilda strängvärden. Var medveten när du bygger dina egna unika skript!

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

resultatet av kommandot ovan är mycket kapslad konfigurationsinformation och metodalternativ för att vidta åtgärder mot VM eller få objektegenskaper.

Get-View
Get-View

om du använder samma skript ovan och skickar utmatningen till en variabel kan du inspektera de kapslade alternativen med dot notation. Här kan du se och hämta all den ytterligare informationen om gästoperativsystemet, som du kanske vill rapportera om via PowerCLI.

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}PS51> $VM.Guest
Använda Get-View med Filterparametern
Använda Get-View med Filterparametern

kanske vill du välja en enda egenskap. Om så är fallet kan du köra följande för att begränsa ett enskilt värde.

PS51> $VM.Guest.GuestFullName

det finns många Get-View alternativ för alla typer av VMware-objekt. Känn dig fri att utforska alla dessa alternativ och granska denna informativ artikel från VMware som går på djupet på denna kraftfulla cmdlet!

VMware Code Capture-lär dig av dina klick

Om du vill dra nytta av PowerCLI men hellre inte bygga kod genom att skriva, är Code Capture i vCenter här för dig. Code Capture är ett nytt utvecklarverktyg som fungerar på samma sätt som Active Directory Administrationscenter. Låt oss täcka Kodfångst i denna PowerCLI-handledning.

det här verktyget registrerar alla åtgärder du tar inom GUI. Det omvandlar sedan alla dessa åtgärder och ger dig PowerCLI-skript.

som standard är Kodfångst inte aktiverat. För att slå på den, öppna din vCenter –apparat och navigera till Menu – > Developer Center som visas nedan.

navigera till menyalternativet Developer Center i vSphere
navigera till menyalternativet Developer Center i vSphere

När du är på fliken Developer Center växlar du aktivera alternativet kodfångst.

aktivera kodfångst
aktivera kodfångst

När du aktiverar Kodfångst ser du en röd inspelningsknapp i vCenter-huvudet. När du har aktiverat, när du vill ha en åtgärd inspelad och förvandlad till PowerCLI-utgång måste du spela in GUI-aktiviteten genom att trycka på inspelningsknappen.

Code capture enabled indicator
Code capture enabled indicator

den röda inspelningsknappen visas bredvid ditt inloggade användaravsnitt i vCenter så att du nu kan spela in när som helst.

för att visa Kodfångst, gå igenom den nya guiden för skapande av virtuell maskin.

  1. Klicka på inspelningsknappen för att börja spela in. Detta gör att den röda inspelningsknappen börjar pulsera.
  2. högerklicka på din VMware-värd och skapa en ny virtuell maskin. Kör igenom den resulterande guiden Skapa en ny virtuell maskin med alla standardvärden.
  3. när den virtuella maskinen har skapats klickar du på inspelningsknappen och stoppar inspelningen.

den resulterande utgången kan vara något mer detaljerad än förväntat. Utgången innehåller även alla åtgärder för att surfa på GUI innan du skapar VM. Men du bör se ett avsnitt som anges i kommentarerna som börjar med CreateVM_Task. Det är här koden börjar skapa en VM.

nedan är en del av CreateVM_Task-utgången från den nya VM-guiden i GUI via Kodfångst:

Utvecklarcenter genererad kod
Utvecklarcenter genererad kod

denna utgång kan vara lite överväldigande, men det exponerar dig direkt till antalet konfigurationsalternativ tillgängliga för dina virtuella maskiner. Beroende på dina egna behov har du nu befogenhet att göra justeringar i dina egna skript och anpassa efter ditt hjärta.

Kodfångstverktyget är inte begränsat bara till VM-skapande. Det kan också bygga kod för nätverksändringar, små VM-modifieringar eller värdkonfigurationsändringar. Genom att kunna granska PowerCLI-utgången från GUI-åtgärder kan du ta en genväg på din resa till infrastruktur som används som kod.

PowerCLI handledning sammanfattning

i den här artikeln täckte du mycket mark. Bra jobbat! Jag hoppas att du har insett kraften som PowerCLI ger för att hantera VMware-Infrastruktur.

det finns många cmdlets i PowerCLI för ett brett utbud av produktbaser men vi täckte bara några här. Var noga med att hålla dig uppdaterad på den här bloggen för fler artiklar om detta fantastiska verktyg!

Vidare läsning

  • hur man laddar ner och installerar PowerCLI
  • officiella VMware PowerCLI docs

Lämna ett svar

Din e-postadress kommer inte publiceras.