Continuiamo con la nostra serie di articoli che, attraverso esempi pratici e semplificati, dimostrano l’applicazioni di strumenti fondamentali nei rispettivi ambiti. Nel seguente esempio pratico introdurremo allo scripting di base su powerCLI. Non certamente una guida omnicomprensiva ma solo uno spunto iniziale per imparare ad usare i cmdlet in ambiente vSphere.
Il primo cmdlet che andiamo a mostrare è quello per connetterci al nostro ambiente vSphere.
È possibile connettersi direttamente ad un host ESXi o al vCenter.
Per connettersi, esegui il seguente comando in una sessione PowerCLI:
connect-viserver –server 〈nome del tuo server〉
Dopo l’esecuzione del comando, verranno richieste le credenziali di accesso. Immettere nome utente e password per il tuo server ESXi o il Server vCenter.
Consiglio: se il vostro server non ha un certificato valido, dovrete lanciare prima il comando:
Set-PowerCLIConfiguration -InvalidCertificateAction:Ignore
PS C:\Users\user> Connect-VIServer -Server sa-vcsa-01.vclass.local
Specify Credential
Please specify server credential
User: [email protected]
Password for user [email protected]: ********
Name Port User
-------- ---- ------
sa-vcsa-01.vclass.local 443 VSPHERE.LOCAL\Administrator
Uno dei comandi di base che possiamo eseguire quando ci colleghiamo a ESXi o vCenter è vedere tutte le VM nell’ambiente. Utilizziamo il cmdlet get-vm per mostrare le informazioni sulle VM.
Get-VM – Il cmdlet get-vm elenca le macchine virtuali in esecuzione sull’host collegato:
PS C:\Users\user> Get-VM
Name PowerState NumCPUs MemoryGB
---- ---------- ------- --------
vROps-Manager8.1.0 PoweredOn 2 16,000
win10-Tools PoweredOff 1 2,000
vm001 PoweredOff 1 1,000
Per ottenere più informazioni dettagliate dal cmdlet get-vm, possiamo mostrare le informazioni complete con il comando:
Get-VM | fl – Visualizza informazioni più dettagliate come il Sistema Operativo Guest, i pool di Risorse, il livello della versione dell’hardware della VM, la cartella in cui si trova, e molti altri dettagli:
PS C:\Users\user> Get-VM | fl
WARNING: The 'Version' property of VirtualMachine type is deprecated. Use the 'HardwareVersion' property instead.
Name : vROps-Manager8.1.0
PowerState : PoweredOn
Notes : vRealize Operations Manager Appliance
Version 8.1.0 running on Photon OS 3.0
Guest : vROps-Manager8.1.0:
NumCpu : 2
CoresPerSocket : 1
MemoryMB : 16384
MemoryGB : 16
VMHostId : HostSystem-host-1008
VMHost : sa-esxi-01.vclass.local
VApp :
FolderId : Folder-group-v1002
Folder : vm
ResourcePoolId : ResourcePool-resgroup-2002
ResourcePool : Resources
HARestartPriority : ClusterRestartPriority
HAIsolationResponse : AsSpecifiedByCluster
DrsAutomationLevel : AsSpecifiedByCluster
VMSwapfilePolicy : Inherit
VMResourceConfiguration : CpuShares:Normal/2000 MemShares:Normal/163840
Version : v11
HardwareVersion : vmx-11
PersistentId : 500de418-b5e6-7767-8957-d7a91ead3804
GuestId : other3xLinux64Guest
UsedSpaceGB : 116,30078125
ProvisionedSpaceGB : 290,89062500
DatastoreIdList : {Datastore-datastore-2003}
CreateDate : 05/11/2020 13:28:15
SEVEnabled :
ExtensionData : VMware.Vim.VirtualMachine
CustomFields : {}
Id : VirtualMachine-vm-4003
Uid : /VIServer=vsphere.local\[email protected]:443/VirtualMachine=VirtualMachi
ne-vm-4003/
- Corso VMware vSphere VCP-DCV;
- Certificazione VMware VCP-DCV;
- Corso Windows Server 2019;
- Corso Linux Administrator;
- Corso Docker e Kubernetes;
Consulta il nostro Catalogo Corsi per Tecnologia oppure fai una Ricerca per Vendor o ancora trova uno specifico corso attraverso il motore di ricerca interno: Ricerca Corsi. Contattaci ora al Numero Verde 800-177596, il nostro team saprà supportarti nella scelta del percorso formativo più adatto alla tue esigenze.
Ora restituiamo informazioni utili specifiche dal commandlet Get-VM. Scopriamo le macchine virtuali che si trovano nello stato PoweredOff. Possiamo ottenere informazioni dal commandlet Get-VM e quindi inserirle nel where-object per selezionare le informazioni specifiche per le quali vogliamo eseguire la query – in questo caso PowerState. Come puoi vedere, ci sono tantissime possibilità di ottenere varie informazioni sulle VM e inserire queste informazioni in un altro commandlet PowerShell.
Get-VM | where-object {$_.PowerState –eq “PoweredOff”}:
PS C:\Users\user> get-vm |Where-object {$_.powerstate -eq "poweredoff"}
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
win10-Tools PoweredOff 1 2,000
vm001 PoweredOff 1 1,000
Come si puo vedere, qui si visualizzano solo le VM che si trovano nel PowerState “PoweredOff”. Questo può essere estremamente utile. Possiamo anche reindirizzare il risultato del comando sopra nel commandlet Start-VM. Quindi in sostanza possiamo ottenere tutte le VM spente e quindi accendere quelle VM:
Get-VM | where-object {$_.PowerState –eq “PoweredOff”} | Start-VM
E se volessimo arrestare certe macchine virtuali potremmo chiamare la VM per nome e quindi usare il commandlet Stop-VMGuest che avvia un arresto del sistema operativo guest. Se non si vuole ricevere la conferma dell’azione, possiamo aggiungere il parametro –confirm:false:
Get-VM 〈nome della VM〉 | Stop-VMguest
Ipotizziamo che si voglia vedere quante macchine virtuali abbiamo in esecuzione che hanno più di 1 CPU assegnata. Di nuovo, possiamo usare il commandlet where-object per selezionare l’oggetto NumCpu.
Get-VM | where-object {$_.NumCpu –gt 1 }:
PS C:\Users\user> Get-VM | where-object {$_.NumCpu -gt 1 }
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
vROps-Manager8.1.0 PoweredOn 2 16,000
Introduciamo ora un altro strumento: I loop. Questi consentono di eseguire la stessa operazione più volte in relazione agli oggetti selezionati o per un numero di volte programmato per la rotazione. Ad esempio, con un ciclo foreach, possiamo eseguire più volte una determinata azione. È configurato come lo pseudo codice qui sotto:
foreach ($var in $vars){
Do something…
}
Se vogliamo ottenere informazioni specifiche sugli oggetti su cui eseguiremo l’azione, possiamo, ad esempio, eseguire la rotazione con un elenco specifico di VM da un file di testo. Per popolare il file di testo, possiamo eseguire il nostro commandlet Get-VM selezionando le proprietà che vogliamo, quindi reindirizzarlo a un file di testo. Possiamo quindi utilizzare PowerShell per leggere il file di testo e posizionare le VM in una matrice su cui possiamo effettuare la rotazione ed eseguire un’azione. Di seguito stiamo aggiungendo una nuova NIC alle macchine virtuali nell’elenco:
Get-vm | where-object {$_.MemoryGB –eq 4 } | select -ExpandProperty Name | out-file c:\myVMs.txt
$vms = get-content c:\myVMs.txt
Foreach-object ($vm in $vms)
{
new-networkadapter -vm $vms -NetworkName "〈Port group name〉" -Type "VMXNET3" –startconnected
}