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
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.
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:
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!
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ö.
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.
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.
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.
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
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.
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.
ä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.
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.
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
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.
När du är på fliken Developer Center växlar du aktivera alternativet 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.
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.
- Klicka på inspelningsknappen för att börja spela in. Detta gör att den röda inspelningsknappen börjar pulsera.
- 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.
- 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:
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