PowerCLI di VMWare sta diventando l’interfaccia ubiqua per gli amministratori di virtualizzazione dell’hypervisor di hardware supportato ESXi. Imparare come gestire VMware tramite PowerShell e PowerCLI è un’importante aggiunta al tuo set di strumenti. In questo tutorial su PowerCLI, imparerai proprio questo.
In questo tutorial, imparerai:
- i concetti base per connettersi all’infrastruttura VMware con PowerCLI
- familiarizzare con i cmdlet per lavorare con gli oggetti di VMware
- acquisire le conoscenze per esplorare
- gestire VMware in modo più approfondito tramite PowerCLI
Iniziamo!
Cosa devi avere e conoscere
Prima di procedere troppo avanti in questo tutorial su PowerCLI, è sempre importante assicurarsi che tu e io siamo sulla stessa pagina. Per questo articolo, supporrò che:
- Hai esperienza di base con PowerShell. Non devi essere un esperto di PowerShell, ma qualsiasi familiarità con PowerShell ti sarà utile.
- Hai un host VMware ESXi o un’appliance vCenter per connetterti e testare
- Stai lavorando su una workstation Windows (o Mac / Linux)
- Hai già installato PowerCLI e sei connesso. Se non lo hai fatto, consulta questo articolo sull’installazione di PowerCLI.
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.
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 un cmdlet appositamente per questo scopo, per raccogliere informazioni dettagliate chiamato Get-VMHost
.
Mentre sei connesso al tuo server vCenter o host ESXi, esegui il seguente cmdlet.

Poiché sono connesso a un’applicazione vCenter Server Appliance che gestisce due host ESXi separati, mi vengono fornite alcune informazioni di base sugli host gestiti. Il Get-VMHost
ti permette di rivedere le capacità hardware dei tuoi host di virtualizzazione. Ma, per impostazione predefinita, Get-VMHost
non restituisce tutte le informazioni che può.
Se invii il cmdlet Get-VMHost
a Format-List
, otterrai l’output della console per tutte le informazioni sugli host forniti.

Get-VMHost | Format-List
Alternativamente, puoi essere più selettivo e selezionare solo le proprietà individuali sull’oggetto VMHost con cui stai lavorando, come:
Sfruttare questa output più dettagliato fornirà una visione ancora più ampia dell’hardware sottostante che esegue i carichi di lavoro virtualizzati. Alcune delle informazioni, in particolare, sarebbero:
- Informazioni sulla validazione della licenza
- Totale CPU/Memoria
- Modello del fornitore hardware
- Nome host DNS
Dopo la revisione, ciò può essere compilato in un file CSV forse utilizzando il Export-CSV
cmdlet.
Ispezione delle VM con PowerCLI
Ora approfondiamo un altro argomento in questo tutorial PowerCLI, esaminando gli host virtuali e verificando quali macchine virtuali sono attualmente presenti su un determinato host ESXi.
Il comando Get-VM
è un utile comando che puoi utilizzare per esaminare le informazioni sulle macchine virtuali.
L’output di questo cmdlet sarà simile a quello riportato di seguito:

L’output sopra fornisce un elenco completo dello stato delle macchine virtuali attualmente in esecuzione su un host specifico. Se scegli di non specificare un host individuale, come ho fatto sopra, riceverai una tabella di informazioni per ogni host successivo e le relative macchine virtuali.
Se mai dovessi risolvere un problema e hai bisogno di conoscere il numero di macchine virtuali su un determinato host o hai la necessità di utilizzare VMware PowerCLI per raccogliere informazioni sull’host ESXi, puoi utilizzare questi cmdlet in futuro. Le funzionalità di reporting che hai a tua disposizione stanno iniziando ad espandersi!
Ispezionare gli switch virtuali con PowerCLI
Per coloro che sono incaricati di configurare o amministrare le reti virtuali di un cluster vCenter, esistono una serie completa di cmdlet di rete per qualsiasi caso d’uso. Se desideri visualizzare gli switch virtuali configurati nel tuo ambiente vSphere, utilizzerai quanto segue:
A seconda del numero di reti virtuali e switch virtuali che hai, l’elenco risultante potrebbe essere piuttosto grande. Nel mio caso, come puoi vedere di seguito, ho un singolo DSwitch che è un Distributed Virtual Switch.
In un’implementazione Enterprise vSphere in cui ci sono molti host ESXi in un cluster, le DSwitch semplificano la distribuzione di switch virtuali e gruppi di porte su una moltitudine di host con la stessa configurazione. Ciò permette di risparmiare sul lavoro manuale di creare configurazioni di rete identiche su ogni host e rappresenta un ottimo modo per scalare il cluster!

Trovare le VM collegate a una rete virtuale con PowerCLI
Mentre si cerca di restringere il campo di un problema, potrebbe essere utile sapere quali VM sono connesse a quali reti. Per scoprirlo, è possibile utilizzare il comando Get-VirtualPortGroup
. Scopriamo di più su questo cmdlet in questo tutorial su PowerCLI.
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.

Per trovare tutte le VM all’interno di quel gruppo di porte (DPortGroup nel mio caso), è possibile eseguire lo script seguente. Assicurarsi di sostituire il valore DPortGroup con il nome del proprio Gruppo di Porte Virtuale.
In questa riga di comando, otteniamo un elenco di tutte le macchine virtuali presenti in questa appliance vCenter, e quindi filtriamo con il cmdlet Where-Object
per ottenere solo quelle VM con un nome di rete corrispondente al nostro Gruppo di Porte.

Con questa uscita, sarà possibile definire quali macchine sono collegate e configurate per ogni rete.
Quando si viene chiesti di individuare e analizzare quali VM sono collegate a una particolare rete in VMware, si avrà ora la possibilità di fornire una soluzione di reportistica PowerCLI a questa domanda.
Ottenere le informazioni sulla versione del sistema operativo sulle proprie VM 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 recuperare un elenco di tutte le dimensioni dei dischi rigidi sulle macchine virtuali o ottenere le versioni del sistema operativo degli ospiti per tutti i tuoi server, tra gli altri.
Queste attività sono complesse su larga scala. PowerCLI è in grado di semplificarle con alcuni importanti cmdlet da aggiungere al tuo arsenale, quindi copriamoli in questo tutorial su PowerCLI.
A un certo punto potresti essere stato chiesto: “Quante server Ubuntu abbiamo nel nostro cluster VMware?”. Potresti quindi aver speso troppo tempo cliccando in giro in vCenter alla ricerca di una risposta. PowerCLI può semplificare questo processo esaminando gli oggetti VM in vCenter e applicando un po’ di magia PowerShell sull’output.
Dai un’occhiata allo script seguente che raccoglie informazioni sulle VM. Questo frammento utilizza il comando Get-View
, di cui parleremo un po’ più avanti, ma per ora dovresti sapere che è un modo avanzato per recuperare le proprietà dell’oggetto VMware. In questo caso, stiamo raccogliendo proprietà nidificate che sono più facilmente recuperabili in questo metodo.
Il codice sopra recupera un elenco di macchine virtuali tramite il cmdlet PowerCLI Get-VM
, ordina tale elenco con il cmdlet PowerShell Sort-Object
e quindi recupera alcune delle proprietà dell’oggetto tramite il cmdlet PowerCLI Get-View
.
Eseguendo questo nel mio ambiente, ottengo il seguente risultato. Puoi vedere il nome della VM in vCenter, il Configured OS
, che indica come l’hardware virtuale di VMware è impostato per interpretare il sistema operativo ospite, e il Running OS
che rappresenta il sistema operativo effettivo.

Con le VM replicant e Scriptrunner spente nel cluster, non sarà possibile visualizzare il valore Running OS
per esse. Le informazioni sul sistema operativo vengono raccolte dal servizio VMware Tools. Se non sono disponibili, PowerCLI non può ottenere le informazioni sul sistema operativo.
Creazione di report CSV con PowerCLI
VMware Tools è un servizio in-guest per le VM Windows e Linux che fornisce informazioni aggiuntive e capacità amministrative all’ipervisore. Più comunemente, ciò fornirà un’arresto pulito, informazioni sul sistema operativo e una visualizzazione della console a risoluzione più elevata delle VM.
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.
Dopo aver eseguito il codice precedente, sarà possibile aprire il file CSV con Excel per esaminare il report.

Ispezione dei dischi rigidi virtuali con PowerCLI
Il comando Get-Harddisk
è un altro comando utile da conoscere. Il cmdlet Get-HardDisk
consente di ispezionare le informazioni sui dischi rigidi virtuali collegati alle VM.
Ad esempio, per interrogare le informazioni sul disco rigido virtuale collegato alla VM exchange1, è possibile eseguire quanto segue:

Alcune di queste informazioni possono essere ridondanti, come la capacità in KB rispetto a GB. Ma è utile conoscere il StorageFormat
(tipi di provisioning sottile/spesso) e conoscere il nome del file VMDK.
Ad esempio, se si riscontra un problema comune e tutti i dischi rigidi delle VM si trovano sullo stesso volume di datastore, questa conoscenza può accelerare la risoluzione dei problemi.
Ispezione degli adattatori di rete virtuali con PowerCLI
Oltre a esaminare le informazioni sul disco rigido delle tue macchine virtuali, potresti voler controllare anche gli adattatori di rete virtuali. Per verificare queste proprietà per una singola VM, puoi utilizzare il cmdlet Get-NetworkAdapter
.
Mentre avevi cercato in precedenza in questa porta tutte le VM che risiedono nella stessa rete, questa volta vuoi vedere solo gli adattatori collegati a una particolare VM.

Questo è utile per la risoluzione dei problemi delle VM che hanno più adattatori di rete collegati. Puoi determinare rapidamente e in un colpo d’occhio se quegli adattatori sono collegati alle reti corrette.
Esecuzione di script PowerShell nelle VM con Invoke-VMScript
Utilizzando Invoke-VMScript
, puoi anche eseguire codice PowerShell direttamente all’interno della VM; non è necessaria la connettività di rete. Se hai mai utilizzato PowerShell Direct in un ambiente Hyper-V, questa sarà un’esperienza simile.
Al posto di creare una sessione di PowerShell Remoting o utilizzare il cmdlet Invoke-Command
tramite la rete, il cmdlet Invoke-VMScript
può inviare comandi direttamente alla VM senza la normale connettività WinRM o SSH.
Come esempio, forse desideri eseguire un semplice elenco delle directory su una VM chiamata exchange1. Per farlo, passeresti dir C:\
come valore del parametro ScriptText
come mostrato di seguito.
I risultati sono come se avessi eseguito i comandi dalla console VM stessa. Invoke-VMScript
poi trasmette tutto l’output del comando che è stato eseguito sulla VM.

Sebbene questo sia un esempio di base, puoi diventare complesso quanto vuoi. Questo cmdlet di PowerCLI ti permette di specificare batch, PowerShell, o tipi Bash all’interno del parametro ScriptText
.
Puoi diventare più avanzato. Di seguito puoi vedere come utilizzare Invoke-VMScript
per eseguire codice PowerShell utilizzando una variabile $script
separata per l’input del parametro ScriptText
. Questo ci permette di creare un input di script più personalizzato per la VM da elaborare.
Il valore del parametro ScriptText
deve essere una stringa. Questo è il motivo per cui la variabile $script
ha le singole virgolette esterne come necessità.
Potresti aver notato anche l’uso del parametro GuestCredential
. Questo parametro viene utilizzato per autenticarsi nel sistema operativo della VM. Questo parametro è particolarmente utile se vuoi eseguire lo script come un account diverso.
Il tuo script in azione dovrebbe produrre un output simile a quello sottostante.

Il risultato di questo script ci fornisce le informazioni sul disco della VM. Basandoti su ciò, dovresti sapere che è una VM remota a causa del VMware Virtual Disk
come nome amichevole dell’unità.
Diventare Avanzati con Get-View
Potresti aver visto che alcuni dei cmdlet di base restituiscono una proprietà chiamata ExtensionData
. Puoi trovare questa proprietà utilizzando il cmdlet PowerShell Get-Member
con molti cmdlet di PowerCLI. Se ti stavi chiedendo cosa fosse, adesso hai l’opportunità di scoprirlo.
Il prossimo passo in questa avventura è capire il cmdlet Get-View
. VMware PowerCLI sfrutta molte query diverse alla VM per fornire l’output carino e semplice di Get-VM
. Ma ciò che c’è sotto il cofano è accessibile solo utilizzando il cmdlet Get-View
.
Probabilmente vedrai molti script che utilizzano questo cmdlet. Ti conviene dedicare del tempo a familiarizzarti con l’utilizzo di questo cmdlet. Per famigliarizzarti, utilizza il cmdlet Get-View
per ottenere alcune informazioni sulla macchina virtuale (exchange1 in questo esempio).
Puoi vedere che le opzioni di filtro di questo cmdlet richiedono l’utilizzo di un hashtable di PowerShell e non singoli valori di stringa. Sii consapevole di ciò quando crei i tuoi script personalizzati!
Il risultato del comando sopra è un sacco di informazioni di configurazione nidificate e opzioni di metodo per eseguire azioni sulla VM o ottenere proprietà degli oggetti.

Se utilizzi lo stesso script sopra e invii l’output a una variabile, puoi ispezionare quelle opzioni nidificate con la notazione a punto. Qui puoi vedere e recuperare tutte quelle informazioni aggiuntive del sistema operativo guest, che potresti voler riportare tramite PowerCLI.

Forse desideri selezionare una singola proprietà. In tal caso, puoi eseguire quanto segue per restringere un valore individuale.
Ci sono molte opzioni Get-View
per tutti i tipi di oggetti VMware. Sentiti libero di esplorare tutte queste opzioni e consulta questo articolo informativo di VMware che approfondisce questo potente cmdlet!
VMware Code Capture – Impara dai tuoi clic
Se desideri approfittare di PowerCLI ma preferisci non scrivere codice, Code Capture in vCenter è qui per te. Code Capture è un nuovo strumento per sviluppatori che agisce in modo simile al Centro Amministrativo di Active Directory. Vediamo come utilizzare Code Capture in questo tutorial su PowerCLI.
Questo strumento registra tutte le azioni che esegui nell’interfaccia grafica. Trasforma quindi tutte queste azioni e fornisce script PowerCLI.
Di default, Code Capture non è attivato. Per attivarlo, apri l’appliance vCenter e vai a Menu -> Centro Sviluppatori come mostrato di seguito.

Una volta nella scheda Centro Sviluppatori, attiva l’opzione Abilita Code Capture.

Quando abiliti Code Capture, vedrai un pulsante rosso Registra nell’intestazione di vCenter. Una volta abilitato, ogni volta che desideri registrare un’azione e trasformarla in output PowerCLI, devi registrare l’attività dell’interfaccia grafica premendo il pulsante registra.

Il pulsante rosso registra apparirà accanto alla sezione dell’utente connesso di vCenter in modo da poter registrare in qualsiasi momento.
Per dimostrare il Code Capture, seguire la procedura guidata di creazione di una Nuova macchina virtuale.
- Fare clic sul pulsante Registra per avviare la registrazione. Ciò farà sì che il pulsante rosso Registra inizi a pulsare.
- Fare clic con il pulsante destro del mouse sull’host VMware e Crea una nuova macchina virtuale. Seguire la procedura guidata risultante per creare una nuova macchina virtuale con tutti i valori predefiniti.
- Una volta creata la macchina virtuale, fare clic sul pulsante di registrazione e interrompere la registrazione.
L’output risultante potrebbe essere leggermente più verboso del previsto. L’output include persino tutte le azioni di navigazione dell’interfaccia grafica prima della creazione della VM. Ma dovresti vedere una sezione contrassegnata nei commenti che inizia con CreateVM_Task
. Qui è dove inizia il codice per creare una VM.
Ecco una parte dell’output di CreateVM_Task del processo di creazione di una nuova VM nell’interfaccia grafica tramite Code Capture:

Questo output può essere un po’ travolgente, ma ti espone direttamente al numero di opzioni di configurazione disponibili per le tue macchine virtuali. A seconda delle tue esigenze, ora sei in grado di apportare modifiche ai tuoi script e personalizzarli come desideri.
La funzionalità Code Capture non si limita solo alla creazione di VM. Può anche generare codice per modifiche di rete, piccole modifiche alle VM o modifiche alla configurazione dell’host. Essendo in grado di esaminare l’output di PowerCLI delle azioni dell’interfaccia grafica, puoi velocizzare il tuo percorso verso l’infrastruttura distribuita come codice.
Riepilogo del tutorial PowerCLI.
In questo articolo, hai coperto molte tematiche. Ottimo lavoro! Spero tu abbia compreso la potenza che PowerCLI porta nella gestione dell’infrastruttura VMware.
Ci sono molti cmdlet in PowerCLI per una vasta gamma di prodotti, ma qui ne abbiamo trattati solo alcuni. Assicurati di rimanere sintonizzato su questo blog per ulteriori articoli su questo straordinario strumento!