1 30/10/2026 9 min

Hyper-V si gestisce bene da PowerShell quando serve precisione: meno passaggi manuali, meno ambiguità e soprattutto più controllo su VM, switch virtuali, dischi e rete. Qui sotto trovi 12 comandi che uso davvero per attività quotidiane e troubleshooting, con un taglio pratico: cosa fanno, quando usarli e quale output aspettarti. Dove il rischio operativo aumenta, lo segnalo chiaramente.

1. Verificare che il ruolo Hyper-V sia presente e attivo

Prima di tutto conviene confermare che il sistema host abbia il ruolo installato e che i moduli PowerShell siano disponibili. Se manca il modulo, non ha senso inseguire errori laterali su VM o switch.

Comando:

Get-WindowsFeature Hyper-V

Su Windows Server l’output deve mostrare Installed sul ruolo Hyper-V. Se stai lavorando su un client Windows con la funzionalità abilitata, il controllo equivalente passa più spesso dal modulo disponibile che dal ruolo server. In caso di dubbio, verifica anche la presenza dei cmdlet:

Get-Command -Module Hyper-V

Se il modulo non compare, il problema è a monte: feature non installata, sessione non elevata o ambiente non compatibile.

2. Elencare tutte le VM con stato e utilizzo base

Il comando più utile per una fotografia immediata dell’ambiente è quello che elenca tutte le macchine virtuali con stato, CPU e memoria configurata. È il primo passo quando devi capire se qualcosa è fermo, spento, in pausa o in esecuzione.

Get-VM

Se vuoi un formato più leggibile, filtra le colonne che ti interessano:

Get-VM | Select-Object Name, State, Status, CPUUsage, MemoryAssigned

Questo è il comando da usare quando devi correlare rapidamente lo stato logico della VM con eventuali sintomi lato applicazione. Se una VM risulta Off o Paused, il problema è spesso più semplice di quanto sembri.

3. Avviare una VM in modo controllato

Avviare una VM sembra banale, ma in ambienti con dipendenze a catena conviene farlo con criterio. Se la VM ospita servizi critici, è bene verificare prima che storage e rete siano disponibili.

Start-VM -Name "VM01"

Dopo l’avvio, controlla lo stato:

Get-VM -Name "VM01" | Select-Object Name, State, Uptime

Se la macchina non parte, gli indizi utili sono nel Visualizzatore eventi di Hyper-V e negli errori restituiti dal cmdlet. In genere conviene leggere subito il messaggio completo invece di riprovare a caso più volte.

4. Spegnere una VM in modo ordinato

Lo spegnimento da PowerShell va distinto tra arresto pulito e stop forzato. Il primo è preferibile perché lascia al sistema guest la possibilità di chiudere servizi, flushare scritture e rilasciare risorse. Il secondo è una scelta di emergenza.

Stop-VM -Name "VM01"

Se il guest integration services sono a posto, questo comando equivale a un arresto gestito. Per forzare uno stop immediato il rischio cresce, perché puoi interrompere operazioni in corso:

Stop-VM -Name "VM01" -TurnOff

Qui il blast radius è chiaro: scritture non flushate, possibili controlli disco al riavvio e impatto applicativo. Usa -TurnOff solo se hai già escluso l’arresto ordinato o se il guest non risponde.

5. Riavviare una VM senza passaggi intermedi inutili

Quando devi applicare una modifica al guest o recuperare un servizio bloccato, il riavvio diretto è il metodo più lineare. Anche qui vale la distinzione tra riavvio gestito e forzato.

Restart-VM -Name "VM01"

Se vuoi limitare il rischio, verifica prima che la VM sia effettivamente quella giusta e che il nome non sia ambiguo:

Get-VM -Name "VM01" | Format-List Name, State, Generation, Path

In ambienti con molte VM, il controllo sul Path aiuta a evitare errori di omonimia o di naming incoerente.

6. Ottenere i dettagli completi di una VM

Quando serve capire come è costruita una macchina virtuale, Get-VM da solo non basta. Serve una vista più ampia su configurazione, generazione, percorso, stato checkpoint e parametri di base.

Get-VM -Name "VM01" | Format-List *

È un comando verboso, ma utile nei casi di troubleshooting. Se vuoi restringere l’output ai campi più interessanti:

Get-VM -Name "VM01" | Select-Object Name, State, Generation, Path, ConfigurationLocation, SnapshotFileLocation

Il vantaggio è evidente quando devi confrontare due host o verificare se una VM è stata spostata in una directory diversa da quella attesa.

7. Gestire memoria e CPU assegnate a una VM

Uno degli errori più comuni è intervenire sulle prestazioni senza sapere cosa è stato assegnato alla VM. Prima di cambiare, guarda i valori correnti; poi modifica con cautela.

Get-VM -Name "VM01" | Select-Object Name, ProcessorCount, MemoryStartup, DynamicMemoryEnabled

Per aumentare il numero di vCPU:

Set-VMProcessor -VMName "VM01" -Count 4

Per regolare la memoria startup:

Set-VM -Name "VM01" -MemoryStartupBytes 4GB

Se usi memoria dinamica, controlla anche i limiti minimo e massimo. Il rollback è semplice: ripristina i valori precedenti, ma conviene annotarli prima della modifica. Il blast radius è sulla pressione di memoria del guest e sull’overcommit dell’host.

8. Creare e verificare uno switch virtuale

La rete Hyper-V ruota intorno agli switch virtuali. Senza uno switch corretto, la VM può essere accesa ma di fatto isolata.

Elenco degli switch presenti:

Get-VMSwitch

Creazione di uno switch esterno associato a una NIC fisica:

New-VMSwitch -Name "ExternalLAN" -NetAdapterName "Ethernet" -AllowManagementOS $true

Qui il rischio operativo è reale: se scegli l’adattatore sbagliato, puoi tagliare la connettività dell’host o cambiare il comportamento della rete management. Prima di premere invio, verifica il nome esatto della scheda con:

Get-NetAdapter

Rollback tipico: rimuovere lo switch errato e ricrearlo correttamente, ma solo dopo aver confermato che non ci siano VM collegate e che l’host abbia un canale alternativo di accesso.

9. Collegare una VM a uno switch virtuale

Dopo aver creato lo switch, la VM deve essere collegata alla rete giusta. Questo passaggio è spesso quello che risolve casi di “VM viva ma irraggiungibile”.

Connect-VMNetworkAdapter -VMName "VM01" -SwitchName "ExternalLAN"

Verifica immediata:

Get-VMNetworkAdapter -VMName "VM01" | Select-Object VMName, SwitchName, MacAddress, Status

Se la VM ha più schede, il controllo sul nome dell’adapter è ancora più importante. In caso di cambio di rete, valuta il possibile impatto su IP statici, gateway e DNS nel guest.

10. Creare un checkpoint prima di una modifica

I checkpoint sono utili prima di patch, test o cambi di configurazione, ma non vanno trattati come backup. Sono uno strumento operativo, non una strategia di protezione dati.

Checkpoint-VM -Name "VM01" -SnapshotName "pre-change-2026-10-30"

Per elencarli:

Get-VMSnapshot -VMName "VM01"

Il rollback più rapido, se il test fallisce, è il ripristino del checkpoint. Ma il blast radius include perdita delle modifiche successive al checkpoint stesso. Se la VM gestisce dati transazionali o servizi con stato delicato, valuta con attenzione se il checkpoint è lo strumento giusto.

11. Esportare una VM per backup operativo o migrazione

L’export è il comando da usare quando vuoi portare via una copia della VM per spostamento, archivio o controllo offline. È più lento di uno snapshot, ma molto più coerente come base di migrazione.

Export-VM -Name "VM01" -Path "D:\Export\VM01"

Prima di esportare, controlla che il volume di destinazione abbia spazio libero sufficiente e che il percorso sia scrivibile. Dopo l’export, verifica la presenza dei file nella cartella scelta, insieme a eventuali differenze di dimensione rispetto all’atteso.

Se l’export serve come precauzione prima di una modifica importante, questo è uno dei pochi casi in cui il tempo speso a preparare bene il rollback paga davvero.

12. Leggere i log e lo stato per diagnosi rapida

Quando una VM non parte, perde rete o si comporta in modo anomalo, i cmdlet di stato vanno letti insieme ai log di sistema. Il vantaggio di PowerShell è che puoi correlare velocemente sintomo e contesto.

Get-VM | Sort-Object State, Name | Format-Table Name, State, Status -Auto

Per vedere gli eventi Hyper-V più recenti in Windows Event Log, puoi partire così:

Get-WinEvent -LogName "Microsoft-Windows-Hyper-V-VMMS/Admin" -MaxEvents 20 | Select-Object TimeCreated, Id, LevelDisplayName, Message

Il valore pratico sta nel messaggio: errori di storage, problemi di accesso ai file di configurazione, conflitti di rete o fallimenti nell’avvio del worker process tendono a emergere qui prima che altrove. Se il log è vuoto o non accessibile, il problema è già un’informazione utile.

Sequenza operativa consigliata quando qualcosa non torna

Se devi mettere ordine in una situazione confusa, io seguo sempre questa sequenza: stato VM, rete, storage, log, poi modifica minima. È un modo semplice per evitare cambiamenti inutili.

  1. Verifica con Get-VM se la VM è davvero accesa, spenta o in pausa.
  2. Controlla lo switch con Get-VMSwitch e l’adapter con Get-VMNetworkAdapter.
  3. Se la VM non risponde, guarda i log con Get-WinEvent.
  4. Applica un solo cambiamento alla volta: avvio, rete, memoria o checkpoint.
  5. Dopo ogni modifica, riconferma lo stato con un comando di lettura, non con assunzioni.

Questa disciplina riduce gli errori e rende più veloce il rollback. In Hyper-V, come in quasi tutta l’amministrazione di sistema, il problema non è fare molte cose: è fare la cosa giusta al momento giusto.

Comandi aggiuntivi da tenere nel cassetto

Ci sono altri cmdlet molto utili, anche se non rientrano nei 12 principali di questa guida. Li cito perché spesso completano il quadro in scenari reali.

Get-VMHardDiskDrive -VMName "VM01"
Get-VMFirmware -VMName "VM01"
Get-VMIntegrationService -VMName "VM01"
Remove-VMSnapshot -VMName "VM01" -Name "pre-change-2026-10-30"

Il quarto comando, Remove-VMSnapshot, è quello più delicato: elimina un checkpoint e quindi consolida lo stato. Usalo solo quando sei certo che il rollback non serva più. Prima di rimuovere, verifica sempre il nome esatto con Get-VMSnapshot.

Uso pratico: una mini-sessione tipo

Un flusso realistico può essere questo: controlli le VM, verifichi lo switch, fai un checkpoint, applichi una modifica minima e poi confermi lo stato finale. In pratica, non lavori mai “alla cieca”.

Get-VM
Get-VMSwitch
Checkpoint-VM -Name "VM01" -SnapshotName "before-maintenance"
Set-VMProcessor -VMName "VM01" -Count 4
Get-VM -Name "VM01" | Select-Object Name, State, CPUUsage, MemoryAssigned

Se qualcosa va storto, il checkpoint è il tuo punto di ritorno. Se invece la modifica va bene, hai comunque un controllo finale pulito che ti dice se la VM è davvero nelle condizioni attese.

Quando PowerShell fa davvero la differenza su Hyper-V

La differenza non è solo nell’automazione. Con PowerShell ottieni coerenza, ripetibilità e un modo più affidabile di leggere lo stato dell’ambiente. È utile quando gestisci poche VM, ma diventa quasi indispensabile quando il numero cresce o quando devi standardizzare operazioni tra host diversi.

Se hai un ambiente con più host, conviene anche salvare gli output critici in file di testo o in report strutturati prima di cambiare configurazioni. Non è glamour, ma evita molti errori banali e rende il rollback molto più semplice da eseguire con lucidità.

Assunzione operativa: i comandi sono stati pensati per un host Windows con modulo Hyper-V disponibile e privilegi amministrativi sufficienti a gestire VM, rete virtuale e checkpoint.