Adam the Automator

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
Get-VMHost
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.

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

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:

PS51 Get-VMHost -Nome Host nome di dominio completo | Get-VM
PS51> Get-VMHost -Nome | Get-VM

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!

Get-VirtualSwitch
Get-VirtualSwitch

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.

Get-VirtualPortGroup
Get-VirtualPortGroup

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.

Ottenere VM con solo un gruppo di porte specifico
Ottenere VM con solo un gruppo di porte specifico

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 OSche è 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.

Ricerca di Vm in base a diversi criteri
Ricerca VMs sulla base di diversi criteri

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-CSVExport-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.

CSV file di informazioni di VM
CSV file di informazioni di VM

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
richiedi informazioni sul disco rigido virtuale collegato al exchange1 Vm
visualizzazione delle informazioni sul disco rigido virtuale collegato al exchange1 Vm

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.

Get-NetworkAdapter
Get-NetworkAdapter

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.

Invoke-VMScript
Invoke-VMScript

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.

uno script in Esecuzione su una macchina virtuale con Invoke-VMScript
uno script in Esecuzione su una macchina virtuale con Invoke-VMScript

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.

Get-View
Get-View

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

Usando Vista con il Parametro Filter
Usando Vista con il Parametro Filter

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.

Navigazione verso la voce di menu Developer Center in vSphere
Navigazione verso la voce di menu Developer Center in vSphere

Una volta alla scheda Developer Center, commuta l’opzione Abilita acquisizione codice.

Abilitazione dell'acquisizione del codice
Abilitazione dell’acquisizione del 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.

Codice di cattura indicatore abilitato
Codice acquisizione indicatore abilitato

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.

  1. Fare clic sul pulsante Registra per iniziare la registrazione. Ciò farà sì che il pulsante di registrazione rosso inizi a pulsare.
  2. 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.
  3. 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:

Centro per Sviluppatori di codice generato
Developer Center codice generato

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.