PowerCLI by VMware sta diventando l’interfaccia onnipresente per gli amministratori di virtualizzazione hypervisor di hardware ESXi supportato. Imparare a gestire VMware tramite PowerShell e PowerCLI è una forte aggiunta al tuo toolkit. In questo tutorial PowerCLI, si sta andando a imparare a fare proprio questo.
In questo tutorial, imparerai:
- le basi della connessione all’infrastruttura VMware con PowerCLI
- familiarizzare con i cmdlet per lavorare con gli oggetti VMware
- potenziare le conoscenze per esplorare
- gestire VMware ulteriormente tramite PowerCLI
Andiamo ad esso!
Sommario
Cosa devi avere e sapere
Prima di arrivare troppo lontano in questo tutorial PowerCLI, è sempre importante assicurarti che io e te siamo entrambi sulla stessa pagina. Per questo articolo, ho intenzione di essere assumendo che:
- Hai un’esperienza PowerShell di base. Non devi essere un esperto di PowerShell, con qualsiasi mezzo, ma qualsiasi familiarità di PowerShell che hai ti servirà bene.
- Hai un host VMware ESXi o un’appliance vCenter per la connessione e il test
- Stai lavorando su una workstation Windows (o Mac / Linux)
- Hai PowerCLI già installato e connesso. In caso contrario, controlla questo articolo di installazione di PowerCLI.
Userò PowerCLI v 11.4.0. Lavorerò da una workstation Windows 10 con Windows PowerShell 5.1, ma siete invitati a utilizzare PowerShell 6 invece come c’è parità di funzionalità per questo tutorial.
Raccogli informazioni sugli host ESXi con PowerCLI
Prima di immergerti nel livello virtuale del nostro ambiente vSphere, è una buona idea rivedere il livello hardware fisico. VMware PowerCLI fornisce direttamente un cmdlet per raccogliere informazioni dettagliate chiamato Get-VMHost
.
Mentre si è connessi al vCenter server o all’host ESXi, eseguire il seguente cmdlet.
PS51> Get-VMHost
Poiché sono connesso a un’appliance vCenter Server che gestisce due host ESXi separati, mi vengono fornite alcune informazioni di base sugli host gestiti. Get-VMHost
consente di esaminare le funzionalità hardware degli host di virtualizzazione. Ma, per impostazione predefinita, Get-VMHost
non restituisce tutte le informazioni che può.
Se pipe il cmdlet Get-VMHost
a Format-List
, otterrai l’output della console per tutte le informazioni sugli host dati.
in Alternativa, si può essere più schizzinosi e solo selezionare le singole proprietà VMHost oggetto che si sta lavorando a contatto con:
PS51> Get-VMHost | format-list -Property State,LicenseKey,Version
Sfruttando questo output più dettagliato si otterrà una visione ancora maggiore dell’hardware sottostante che esegue i carichi di lavoro virtualizzati. Alcune delle informazioni, in particolare, sarebbero:
- Informazioni sulla convalida della licenza
- CPU/Memory totals
- Hardware vendor model
- DNS hostname
Dopo la revisione, questo può essere compilato in un file CSV forse usando ilExport-CSV
cmdlet.
Ispezionare le macchine virtuali con PowerCLI
Passiamo ora a un altro argomento in questo tutorial PowerCLI rivedendo gli host virtuali sta esaminando quali macchine virtuali sono attualmente presenti su un determinato host ESXi.
Il comandoGet-VM
è un pratico comando che puoi usare per rivedere le informazioni sulle macchine virtuali.
PS51> Get-VMHost -Name <Host FQDN> | Get-VM
L’output di questo cmdlet sarà simile a quello riportato di seguito:
L’output di cui sopra fornisce una completa lista di stato di attualmente le macchine virtuali in esecuzione su un determinato host. Se dovessi scegliere di non specificare un singolo host, come ho fatto sopra, riceverai una tabella di informazioni per ogni host successivo e le VM su ciascuno.
In caso di risoluzione di un problema e necessità di conoscere il numero di macchine virtuali su un determinato host o di utilizzare VMware PowerCLI per raccogliere informazioni sull’host ESXi, è possibile utilizzare questi cmdlet in futuro. La funzionalità di reporting che hai a portata di mano sta iniziando ad espandersi!
Ispezione di switch virtuali con PowerCLI
Per quelli di noi incaricati di configurare o amministrare le reti virtuali di un cluster vCenter, esiste una gamma completa di cmdlet di rete per qualsiasi caso d’uso. Se si desidera visualizzare gli switch virtuali configurati nell’ambiente vSphere, si utilizzerà quanto segue:
PS51> Get-VirtualSwitch
A seconda del numero di reti virtuali e switch virtuali disponibili, l’elenco risultante potrebbe essere piuttosto ampio. Nel mio caso, come vedi sotto, ho un singolo DSwitch che è uno switch virtuale distribuito.
In un’implementazione Enterprise vSphere dove ci sono molti host ESXi in un cluster, i DSWITCH semplificano la distribuzione di switch virtuali e gruppi di porte su una moltitudine di host con la stessa configurazione. Ciò consente di risparmiare sul lavoro manuale di creare configurazioni di rete identiche su ogni host manualmente, ed è un ottimo modo per scalare il cluster!
Ricerca VMs Collegato a una Rete Virtuale con PowerCLI
Durante il tentativo di restringere l’ambito di un problema, ci si potrebbe chiedere quale le macchine virtuali sono connessi alle reti. Per capirlo, puoi usare il comandoGet-VirtualPortGroup
. Impariamo a conoscere questo cmdlet in questo tutorial PowerCLI.
Un gruppo di porte è essenzialmente una rete virtuale. Per visualizzare tutti i gruppi di porte, eseguire Get-VirtualPortGroup
senza alcun parametro. Dovresti quindi vedere un elenco di tutti i gruppi di porte virtuali presenti nel tuo ambiente vSphere.
Per trovare tutte le macchine virtuali all’interno del porto di gruppo (DPortGroup nel mio caso), è possibile eseguire il seguente script. Assicurarsi di sostituire il valore DPortGroup con il nome del gruppo di porte virtuali.
PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}
In questo one-liner, stiamo ottenendo un elenco di tutte le macchine virtuali che esistono in questa appliance vCenter, e quindi filtrando con il cmdletWhere-Object
per ottenere solo quelle macchine virtuali con un nome di rete che corrisponde al nostro gruppo di porte.
Con questo output, sarete in grado di definire quali macchine sono collegati e configurati per ogni rete.
Quando viene chiesto di individuare e analizzare quali VM sono collegate a una particolare rete in VMware, sarà ora possibile fornire una soluzione di reporting PowerCLI a questa domanda.
Ottenere informazioni sulla versione del sistema operativo sulle macchine virtuali con PowerCLI
La maggior parte del lavoro amministrativo all’interno di VMware viene svolto a livello di macchina virtuale. È probabile che tu riceva innumerevoli richieste per attività come il recupero di un elenco di tutte le dimensioni del disco rigido sulle macchine virtuali o l’ottenimento di versioni del sistema operativo guest per tutti i server, tra gli altri.
Questi compiti sono ingombranti su larga scala. PowerCLI è in grado di semplificare questi con alcuni cmdlet importanti da aggiungere al tuo arsenale, quindi copriamoli in questo tutorial PowerCLI.
A un certo punto potrebbe esserti stato chiesto: “Quanti server Ubuntu abbiamo nel nostro cluster VMware?”. Potresti aver passato troppo tempo a fare clic su vCenter alla ricerca di una risposta. PowerCLI può semplificare questo processo osservando gli oggetti VM in vCenter e applicando alcune magie PowerShell sull’output.
Dai un’occhiata al seguente script che riunisce le informazioni della VM. Questo snippet utilizza il comandoGet-View
che entreremo un po ‘ più tardi, ma per ora, dovresti sapere che è un modo avanzato per recuperare le proprietà degli oggetti VMware. In questo caso, stiamo raccogliendo proprietà nidificate che sono più facilmente recuperabili in questo metodo.
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}}
Il codice precedente sta recuperando un elenco di macchine virtuali tramite il cmdlet PowerCLI Get-VM
, ordinando detto elenco con il cmdlet PowerShell Sort-Object
, e quindi recuperando alcune delle proprietà dell’oggetto utilizzando PowerCLI Get-View
cmdlet.
L’esecuzione di questo nel mio ambiente produce il risultato di seguito. È possibile vedere il nome della VM in vCenter ,il Configured OS
che è il modo in cui l’hardware virtuale di VMware è impostato per interpretare il sistema operativo guest e l’effettivo Running OS
che rappresenta il sistema operativo effettivo.
Con il VMs replicante e Scriptrunner sono spenti nel cluster, non sarà in grado di vedere il Running OS
valore per loro. Il sistema operativo è raccolto dal servizio VMware Tools. Se non è disponibile, PowerCLI non può estrarre le informazioni del sistema operativo.
Creazione di report CSV con PowerCLI
VMware Tools è un servizio in-guest per VM Windows e Linux che fornisce all’hypervisor informazioni aggiuntive e funzionalità amministrative. Più comunemente questo fornirà clean-shutdown, informazioni sul sistema operativo, e una maggiore risoluzione console di visualizzazione delle macchine virtuali.
Un modo conveniente per segnalare e fornire queste informazioni sarebbe quello di inserire lo script sopra nel cmdlet Export-CSV
Export-Csv
creerà un file CSV con le stesse informazioni visualizzate nella 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
Dopo aver eseguito il codice di cui sopra, si dovrebbe quindi essere in grado di aprire il file CSV con Excel per rivedere il rapporto.
l’Ispezione di Dischi Rigidi Virtuali con PowerCLI
Get-Harddisk
il comando è un altro comando utile per conoscere. Il cmdletGet-HardDisk
consente di ispezionare le informazioni sui dischi rigidi virtuali collegati alle macchine virtuali.
Ad esempio, per interrogare informazioni sul disco rigido virtuale collegato alla VM exchange1, è possibile eseguire quanto segue:
PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
Alcune di queste informazioni possono essere ridondanti, come la capacità KB vs GB. Ma c’è valore nel conoscere StorageFormat
(tipi di provisioning thin/thick). E conoscendo il nome del file VMDK.
Ad esempio, se si verifica un problema comune e tutti i dischi rigidi delle VM risiedono sullo stesso volume di datastore, questa conoscenza potrebbe accelerare la risoluzione dei problemi.
Controllo delle schede di rete virtuali con PowerCLI
Oltre a rivedere le informazioni sul disco rigido delle macchine virtuali, è possibile controllare anche le schede di rete virtuali. Per verificare queste proprietà per una singola VM, è possibile utilizzare il cmdletGet-NetworkAdpter
.
PS51> Get-NetworkAdapter -VM myVM
Mentre avevi cacciato in precedenza in questa porta tutte le VM residenti nella stessa rete, questa volta vuoi solo vedere gli adattatori collegati a una particolare VM.
Questa funzione è utile per la risoluzione dei problemi delle macchine virtuali con più schede di rete collegate. È possibile rapidamente e a colpo d’occhio determinare se tali adattatori sono collegati alle reti corrette.
Esecuzione di script PowerShell in VM con Invoke-VMScript
UtilizzandoInvoke-VMScript
, è anche possibile eseguire il codice PowerShell direttamente all’interno della VM; nessuna connettività di rete necessaria. Se hai mai usato PowerShell Direct all’interno di un ambiente Hyper-V, questa sarà un’esperienza simile.
Invece di creare una sessione di Remoting PowerShell o utilizzare il cmdletInvoke-Command
sulla rete, il cmdletInvoke-VMScript
può inviare comandi direttamente alla VM senza la normale connettività WinRM o SSH.
Ad esempio, forse ti piacerebbe eseguire un semplice elenco di directory su una VM chiamata exchange1. Per fare ciò, passerai dir C:\
come valore per il parametro ScriptText
come mostrato di seguito.
PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"
I risultati sono come se avessi eseguito i comandi dalla console della VM stessa. Invoke-VMScript
quindi trasmette tutto l’output restituito dal comando eseguito sulla VM.
Anche se questo è un esempio di base, è possibile ottenere il più complicato possibile. Questo cmdlet PowerCLI consente di specificare i tipi batch, PowerShell o Bash all’interno del parametro ScriptText
.
È possibile ottenere più avanzato pure. Di seguito puoi vedere come utilizzare Invoke-VMScript
per eseguire il codice PowerShell utilizzando una variabile separata $script
per l’input del parametro ScriptText
. Ciò ci consente di creare input di script più personalizzati per la VM da elaborare.
PS51> $script = 'Get-Disk'$guestCredential = Get-CredentialInvoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential -ScriptType Powershell
IlScriptText
valore del parametro ha bisogno di una stringa. Questo è il motivo per cui la variabile$script
ha le virgolette singole come necessità.
Potresti anche aver notato l’uso del parametro GuestCredential
. Questo parametro viene utilizzato per l’autenticazione nel sistema operativo VM. Questo parametro è particolarmente utile se si desidera eseguire lo script come un account diverso.
Lo script in azione dovrebbe risultare in un output simile a quello riportato di seguito.
Il risultato di questo script ci fornisce la VM, le informazioni sul disco. Sulla base di ciò, dovresti sapere che è una VM remota a causa di VMware Virtual Disk
come nome descrittivo dell’unità.
Avanzare con Get-View
Potresti aver visto alcuni dei cmdlet di base restituire una proprietà chiamataExtensionData
. È possibile trovare questa proprietà collegando molti cmdlet PowerCLI al cmdlet PowerShell Get-Member
. Se ti stavi chiedendo cosa fosse, ora è la tua occasione per scoprirlo.
Il prossimo passo in questa impresa è comprendere il cmdlet Get-View
. VMware PowerCLI sfrutta molte query diverse per la VM per fornire l’output semplice e semplice di Get-VM
. Ma c’è molto sotto il cofano che è accessibile solo usando il cmdlet Get-View
.
È probabile che tu veda molti script che usano questo cmdlet. Sarebbe opportuno passare un po ‘ di tempo ad abituarsi a vedere questo cmdlet in azione. Per familiarizzare, utilizzare il cmdletGet-View
per ottenere alcune informazioni sulla macchina virtuale (exchange1 in questo esempio).
Puoi vedere le opzioni Filter
di questo cmdlet richiedono l’uso di una hashtable PowerShell e non di singoli valori di stringa. Essere consapevoli quando si costruisce il proprio script unici!
PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}
Il risultato del comando precedente è un sacco di informazioni di configurazione nidificate e opzioni di metodo per eseguire azioni contro la VM o ottenere proprietà dell’oggetto.
Se si utilizza lo stesso script sopra e si invia l’output a una variabile, è possibile ispezionare le opzioni nidificate con dot notazione. Qui puoi vedere e recuperare tutte le informazioni aggiuntive del sistema operativo guest, che potresti voler segnalare tramite PowerCLI.
PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}PS51> $VM.Guest
Forse si desidera selezionare una singola proprietà. In tal caso, è possibile eseguire quanto segue per restringere un singolo valore.
PS51> $VM.Guest.GuestFullName
Ci sono molte opzioniGet-View
per tutti i tipi di oggetti VMware. Sentitevi liberi di esplorare tutte queste opzioni e rivedere questo articolo informativo da VMware che va in profondità su questo potente cmdlet!
VMware Code Capture – Impara dai tuoi clic
Se desideri sfruttare PowerCLI ma preferisci non creare codice digitando, Code Capture in vCenter è qui per te. Code Capture è un nuovo strumento di sviluppo che agisce in modo simile al Centro amministrativo di Active Directory. Copriamo la cattura del codice in questo tutorial PowerCLI.
Questo strumento registra tutte le azioni intraprese all’interno della GUI. Trasforma quindi tutte queste azioni e fornisce script PowerCLI.
Per impostazione predefinita, l’acquisizione del codice non è attivata. Per accenderlo, apri l’appliance vCenter e vai a Menu – > Developer Center come mostrato di seguito.
Una volta alla scheda Developer Center, commuta l’opzione Abilita acquisizione codice.
Quando si abilita l’acquisizione del codice, verrà visualizzato un pulsante di registrazione rosso all’interno dell’intestazione di vCenter. Una volta abilitato, ogni volta che si desidera avere un’azione registrata e trasformata in uscita PowerCLI è necessario registrare l’attività GUI premendo il pulsante di registrazione.
Il rosso pulsante di registrazione apparirà accanto al tuo utente connesso sezione di vCenter, in modo che ora si può registrare in qualsiasi momento.
Per dimostrare l’acquisizione del codice, passare attraverso la creazione guidata nuova macchina virtuale.
- Fare clic sul pulsante Registra per iniziare la registrazione. Ciò farà sì che il pulsante di registrazione rosso inizi a pulsare.
- Fare clic con il pulsante destro del mouse sull’host VMware e creare una nuova macchina virtuale. Eseguire la procedura guidata risultante creando una nuova macchina virtuale con tutti i valori predefiniti.
- Una volta creata la macchina virtuale, fare clic sul pulsante Registra e interrompere la registrazione.
L’output risultante potrebbe essere leggermente più dettagliato del previsto. L’output include anche tutte le azioni di navigazione nella GUI prima di creare la VM. Ma dovresti vedere una sezione indicata nei commenti che inizia conCreateVM_Task
. Questo è dove il codice inizia a creare una VM.
di Seguito è una porzione di CreateVM_Task uscita della Nuova VM processo di creazione Guidata nella GUI tramite l’Acquisizione dei codici:
Questa uscita può essere un po ‘ opprimente, ma si espone direttamente al numero di opzioni di configurazione disponibili per le macchine virtuali. A seconda delle tue esigenze, ora hai il potere di apportare modifiche ai tuoi script e personalizzarli in base al contenuto del tuo cuore.
L’utilità di acquisizione del codice non è limitata solo alla creazione di VM. Può anche creare codice per modifiche alla rete, piccole modifiche alla VM o modifiche alla configurazione dell’host. Essendo in grado di rivedere l’output PowerCLI delle azioni GUI, è possibile eseguire una scorciatoia durante il viaggio verso l’infrastruttura distribuita come codice.
PowerCLI Tutorial Summary
In questo articolo, hai coperto un sacco di terreno. Bel lavoro! Spero che tu abbia capito la potenza che PowerCLI apporta alla gestione dell’infrastruttura VMware.
Ci sono un sacco di cmdlet in PowerCLI per una vasta gamma di basi di prodotto, ma abbiamo coperto solo alcuni qui. Essere sicuri di rimanere sintonizzati su questo blog per ulteriori articoli su questo strumento impressionante!
Ulteriori informazioni
- Come scaricare e installare PowerCLI
- Documenti ufficiali VMware PowerCLI