Modulo PowerShell Hyper-V: Ottenere più cose fatte

Se stai utilizzando la piattaforma di virtualizzazione Hyper-V di Microsoft per eseguire macchine virtuali, probabilmente conosci l’utilizzo di Hyper-V Manager. Ma sai che puoi fare di più in meno tempo con il modulo PowerShell di Hyper-V?

In questo tutorial, imparerai come gestire le macchine virtuali Hyper-V con PowerShell, inclusa la creazione, la rimozione e anche l’utilizzo degli snapshot delle VM!

Prerequisiti

Per questo tutorial, avrai bisogno di quanto segue:

  • A Windows client to connect to a remote Hyper-V host. This tutorial uses Windows 10 Pro.
  • A Hyper-V host with PowerShell Remoting enabled. The tutorial’s Hyper-V host is named HYPER and is in a workgroup but an Active-Directory joined client and host will work as well.
  • A user account on the Hyper-V host in the local administrators group or in the Hyper-V Administrators group. This tutorial will use an account called localadmin.

Connessione a un host Hyper-V remoto

Per lavorare con Hyper-V in PowerShell, è necessario poter comunicare con l’host Hyper-V in qualche modo. Puoi farlo a livello locale eseguendo i cmdlet di PowerShell di Hyper-V fornendo il nome dell’host Hyper-V, oppure puoi utilizzare il PowerShell Remoting per connetterti direttamente all’host Hyper-V.

In questo tutorial, stabilirai una connessione persistente all’host Hyper-V e eseguirai i comandi direttamente sull’host Hyper-V.

1. Apri PowerShell sul tuo computer locale.

2. Esegui il cmdlet Enter-PSSession fornendo l’hostname del tuo host Hyper-V remoto per il parametro ComputerName. Questa azione crea una sessione interattiva e ti permette di eseguire comandi in modo interattivo sull’host Hyper-V remoto.

Enter-PSSession -ComputerName HYPER -Credential (Get-Credential)

Se il tuo client e l’host Hyper-V sono membri dello stesso dominio Active Directory, non è necessario utilizzare il parametro Credential.

3. Ti verrà quindi richiesto un nome utente e una password per connetterti all’host Hyper-V. Questo nome utente e questa password saranno di un utente amministratore locale sull’host remoto. Una volta connesso, dovresti vedere che il prompt di PowerShell è cambiato per mostrare l’hostname dell’host Hyper-V.

Ora sei pronto per iniziare a eseguire comandi!

Creazione di VM Hyper-V con PowerShell

Presumendo che ora sei connesso al tuo host Hyper-V utilizzando PowerShell Remoting, iniziamo a eseguire comandi creando una VM Hyper-V.

Creazione di una VM Semplice

Mentre sei nella sessione PSRemoting connessa all’host Hyper-V remoto:

Esegui il cmdlet New-VM per creare una nuova VM. Quando crei una VM con il cmdlet New-VM, hai molte opzioni diverse da scegliere su come crearla.

1. In questo esempio sottostante, il tutorial sta creando una VM con:

  • A name of MyVM (HYPER)
  • 512MB di RAM (MemoryStartupBytes)
New-VM -Name "HYPER" -MemoryStartupBytes 512MB
New VM named “HYPER”

Creazione di una VM Basata su Altri Attributi della VM

A volte è necessario creare una VM con attributi simili a un’altra VM. Puoi farlo assegnando vari attributi di VM a variabili e poi utilizzando quelle variabili durante la creazione della nuova VM. Come esempio:

1. Esegui il comando Get-VM per interrogare gli attributi di una VM esistente assegnando l’output a una variabile come mostrato di seguito.

$VMold = Get-VM "HYPER_old"

2. Esegui il cmdlet Get-VMMemory fornendo il nome della VM da cui raccogliere gli attributi (in questo caso, la memoria), e assegna il valore della memoria a una variabile.

$memory = (Get-VMMemory -VMName $VMold.name).Startup

3. Successivamente, crea una nuova VM con il cmdlet New-VM fornendo il Nome, la generazione della VM (Generazione) utilizzando la proprietà Generazione dall’altra VM, e la quantità di memoria dal valore ottenuto dall’altra VM.

New-VM -Name "newVM" -Generation $VMold.Generation -MemoryStartupBytes $memory
New VM created from Old existing VM

Elenco delle VM esistenti con PowerShell

Ora che hai almeno due VM create sull’host Hyper-V, esploriamo come enumerare le VM create. Per farlo:

1. Esegui il cmdlet Get-VM da solo. Quando lo esegui senza parametri, Get-VM interroga l’host Hyper-V per tutte le VM esistenti. Get-VM

Get-VM
Output of Get-VM run with no Parameters

2. Forse desideri cercare solo una singola VM. In tal caso, utilizza il parametro -Nome. Il comando di codice seguente sta interrogando Hyper-V per la VM creata in precedenza chiamata HYPER_old. Get-VM -Nome HYPER_old

Get-VM -Name HYPER_old
Output of Get-VM run with the -Name Parameter

Successivamente, forse hai bisogno di trovare tutte le VM che si trovano in uno specifico Stato. Nessun problema. Per farlo, esegui Get-VM, che interroga tutte le VM ma invia l’output al cmdlet Where-Object.

Nell’esempio seguente, il tubo ‘|’ limita l’output di Get-VM solo agli oggetti VM con uno stato di Running. Get-VM -Nome_VM HYPER_old | Where-Object {$_.State -eq 'Running'}

Get-VM -VMName HYPER_old | Where-Object {$_.State -eq 'Running'}
Output of Get-VM filtering out the VM with the state of Running

Avviare e arrestare le VM

In questo momento, probabilmente la VM creata in precedenza è ferma. Cambiamo questo avviandola e imparando quindi anche come arrestare le VM.

Nella sessione PowerShell dell’host Hyper-V remoto:

1. Esegui il cmdlet Start-VM fornendo il nome (Nome) della VM creata in precedenza con il parametro -Nome

Start-VM -Name NewVM
The Start-VM command starting the VM named HYPER_old

Ora che la VM è avviata, arrestala usando il cmdlet Stop-VM fornendo il nome della VM con il parametro Nome.

Stop-VM -Name HYPER_old

Appena esegui il comando sopra, vedrai la VM spegnersi come mostrato nello screenshot sotto;

Stop-VM stopping the HYPER_old VM

Modifica delle VM Hyper-V

Le VM non rimangono sempre le stesse. Forse devi aumentare le risorse CPU, o la VM sta costantemente esaurendo la memoria. In tal caso, il cmdlet Set-VM è il tuo amico.

Come esempio di modifica delle VM esistenti, nella sessione PowerShell dell’host Hyper-V remoto:

Esegui il cmdlet Set-VM per spegnere automaticamente la VM HYPER_old attualmente in esecuzione. Utilizza il parametro Name per specificare la VM da impostare e specifica Shutdown come valore per il parametro AutomaticStopAction per assicurarti che la VM venga automaticamente arrestata correttamente quando viene spento l’host Hyper-V.

Set-VM -Name HYPER_old -AutomaticStopAction Shutdown

Salvataggio delle VM di Hyper-V

Nella sessione PowerShell remota dell’host Hyper-V, potresti dover salvare la VM che crei per preservare lo stato della memoria della VM per un uso successivo. Per fare ciò, utilizza il cmdlet Save-VM con il parametro Name specificando il nome della VM che desideri salvare.

Nota che la VM che desideri salvare deve trovarsi in uno stato di esecuzione.

Save-VM -Name HYPER_old
Save-VM cmdlet saving HYPER_old VM state.

Gestione dei checkpoint delle VM di Hyper-V

Se hai bisogno di salvare lo stato esistente di una VM prima di apportare modifiche o ripristinare le modifiche alla VM, dovresti apprendere riguardo ai checkpoint. I checkpoint sono un modo pratico per salvare rapidamente lo stato del disco e della memoria di qualsiasi VM di Hyper-V.

Mentre sei sull’host Hyper-V, esegui il cmdlet Checkpoint-VM, fornendo il nome della VM da salvare e un nome per il checkpoint.

Il parametro nome, SnapshotName, fa ancora riferimento alla vecchia terminologia utilizzata in Hyper-V 2012. Uno snapshot è la stessa cosa di un checkpoint.

Checkpoint-VM -Name HYPER_old -SnapshotName MyVMSnapshot
Using Checkpoint-VM to create a Snapshot of HYPER_old VM called MyVMSnapshot

Una volta creato un checkpoint, è possibile utilizzare il cmdlet Get-VMSnapshot per recuperare tutti gli snapshot archiviati sull’host Hyper-V. Di seguito, puoi vedere che la VM HYPER_old ha tre checkpoint.

Get-VMSnapshot -VMName HYPER_old
Retrieves all the Snapshots stored for HYPER_old VM

Conclusion

Se hai seguito tutte le demo in questo tutorial, sei sulla buona strada per gestire le VM Hyper-V con PowerShell. Dovresti ora avere le conoscenze necessarie per gestire 1, 10 o addirittura 100 VM!

Quali tipi di attività pensi di poter automatizzare ora con PowerShell e Hyper-V?

Source:
https://adamtheautomator.com/hyper-v-powershell/