Virtualizzazione

vSphere: Script Pre-Migrazione per Evitare Sorprese

vSphere: Script Pre-Migrazione per Evitare Sorprese

Preparare una migrazione in un ambiente vSphere, specialmente in contesti enterprise con centinaia di Virtual Machine, è un’operazione che non ammette improvvisazione. Un’analisi preliminare accurata è fondamentale per prevenire interruzioni di servizio, problemi di compatibilità e ritardi inaspettati. Ho gestito migrazioni di ambienti con oltre 300 VM e 300+ server, e l’esperienza mi ha insegnato che la fase di pre-check è quella che determina il successo o il fallimento dell’intero processo. Senza una verifica sistematica, rischi di scoprire incompatibilità di rete, storage insufficiente o configurazioni errate solo a migrazione avviata, con costi operativi elevati e un impatto diretto sulla business continuity. Questo articolo descrive uno script PowerShell per automatizzare gran parte di questa analisi, fornendo un report dettagliato che ti permetterà di agire proattivamente.

Testato su: VMware vSphere 8.0 · PowerShell 7.4 · Settembre 2026

Prerequisiti / Ambiente di test

Per eseguire lo script è necessario avere un sistema con PowerShell (preferibilmente PowerShell Core 7.x o superiore) e il modulo VMware PowerCLI installato e configurato. Assicurati di avere le credenziali necessarie per connetterti al vCenter Server con permessi di lettura su tutte le VM, gli host e i datastore. È consigliabile eseguire lo script da una macchina di gestione dedicata.

Installazione PowerCLI:

Install-Module -Name VMware.PowerCLI -Scope CurrentUser
Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false -Confirm:$false

Connessione a vCenter Server:

Connect-VIServer -Server your_vcenter_fqdn -User your_username -Password your_password

Sostituisci your_vcenter_fqdn, your_username e your_password con i valori corretti del tuo ambiente. Per motivi di sicurezza, valuta l’uso di credenziali gestite o l’autenticazione integrata se disponibile.

Script di verifica pre migrazione per un ambiente vSphere

Questo script PowerShell raccoglie informazioni cruciali sull’ambiente vSphere, concentrandosi su aspetti che spesso causano problemi durante le migrazioni. L’output è strutturato per facilitare l’analisi e l’identificazione rapida dei potenziali ostacoli.

# Script di verifica pre-migrazione vSphere

# Funzione per esportare i dati in CSV
function Export-Report {
    param(
        [Parameter(Mandatory=$true)]
        [string]$ReportName,
        [Parameter(Mandatory=$true)]
        $Data
    )
    $Timestamp = Get-Date -Format "yyyyMMdd_HHmmss"
    $FileName = "vSphere_PreMig_Report_$(($ReportName -replace ' ' -replace '\(','' -replace '\)','') | Select -First 30)_$Timestamp.csv"
    $Data | Export-Csv -Path $FileName -NoTypeInformation -UseCulture
    Write-Host "Report '$ReportName' esportato in: $FileName"
}

Write-Host "Inizio analisi ambiente vSphere..."

# 1. Raccogli informazioni sulle VM
Write-Host "Rilevamento VM..."
$vmInfo = Get-VM | Select Name, PowerState, NumCpu, MemoryGB, GuestId, Version, @{N='VMHost';E={$_.VMHost.Name}}, @{N='NetworkAdapter';E={($_.NetworkAdapters | Select -ExpandProperty NetworkName) -join ', '}}, @{N='Disks';E={($_.HardDisks | Select -ExpandProperty Name) -join ', '}}, @{N='Snapshots';E={($_.Snapshot | Select -ExpandProperty Name) -join ', '}}
Export-Report -ReportName "VM_General_Info" -Data $vmInfo

# 2. Rileva VM con snapshot attivi
Write-Host "Rilevamento snapshot attivi..."
$vmSnapshots = Get-VM | Get-Snapshot | Select VM, Name, Created, SizeGB
if ($vmSnapshots) {
    Export-Report -ReportName "VM_Active_Snapshots" -Data $vmSnapshots
    Write-Warning "Sono stati rilevati snapshot attivi. Si consiglia di consolidarli prima della migrazione."
}

# 3. Rileva VM con dischi RDM (Raw Device Mapping)
Write-Host "Rilevamento dischi RDM..."
$vmRDM = Get-VM | Get-HardDisk -DiskType "RawPhysical", "RawVirtual" | Select Parent, Name, DiskType, CapacityGB, @{N='Datastore';E={$_.ExtensionData.Backing.FileName.Split("[")[-1].Split("]")[0]}}
if ($vmRDM) {
    Export-Report -ReportName "VM_RDM_Disks" -Data $vmRDM
    Write-Warning "Sono stati rilevati dischi RDM. Questi richiedono una gestione speciale durante la migrazione."
}

# 4. Rileva VM con VMware Tools non aggiornati o non installati
Write-Host "Rilevamento stato VMware Tools..."
$vmToolsStatus = Get-VM | Select Name, GuestId, @{N='ToolsStatus';E={$_.ExtensionData.Guest.ToolsStatus}}, @{N='ToolsVersion';E={$_.ExtensionData.Guest.ToolsVersionStatus}}
Export-Report -ReportName "VM_Tools_Status" -Data $vmToolsStatus

# 5. Rileva utilizzo dello storage per datastore
Write-Host "Rilevamento utilizzo datastore..."
$datastoreUsage = Get-Datastore | Select Name, Type, CapacityGB, FreeSpaceGB, @{N='UsedSpaceGB';E={$_.CapacityGB - $_.FreeSpaceGB}}, @{N='FreeSpacePercent';E={($_.FreeSpaceGB / $_.CapacityGB * 100).ToString("N2")}}
Export-Report -ReportName "Datastore_Usage" -Data $datastoreUsage

# 6. Rileva host ESXi e loro configurazione di rete (vSwitch/PortGroup)
Write-Host "Rilevamento configurazione rete host..."
$hostNetwork = Get-VMHost | Get-VirtualSwitch | Select VMHost, Name, NumPorts, @{N='PortGroups';E={($_.PortGroups | Select -ExpandProperty Name) -join ', '}}
Export-Report -ReportName "Host_Network_Config" -Data $hostNetwork

Write-Host "Analisi completata. Controlla i file CSV generati nella directory corrente."

Output e analisi dei dati

Lo script genererà diversi file CSV, ognuno contenente un set specifico di dati. Analizza questi report con attenzione:

  • VM_General_Info.csv: Offre una panoramica di base di tutte le VM. Controlla lo stato di accensione (PowerState), la versione hardware (Version) e le reti (NetworkAdapter). Versioni hardware obsolete potrebbero necessitare un upgrade prima della migrazione. Leggi anche: VMware Hardware Version: Quando e Perché Aggiornare
  • VM_Active_Snapshots.csv: Elenca tutte le VM con snapshot attivi. Gli snapshot devono essere consolidati prima di avviare una migrazione, specialmente se si prevede un vMotion tra datastore o host diversi. Lasciare snapshot attivi può causare problemi di performance e aumentare il rischio di corruzione dati o rallentamenti significativi nel trasferimento.
  • VM_RDM_Disks.csv: Identifica le VM con dischi RDM. La gestione degli RDM in una migrazione è complessa e richiede una pianificazione specifica, spesso con la conversione a VMDK o l’uso di soluzioni di storage avanzate.
  • VM_Tools_Status.csv: Mostra lo stato e la versione di VMware Tools. VM Tools non aggiornati o non installati possono limitare le funzionalità della VM post-migrazione, inclusa la gestione dello shutdown, le performance di rete e disco, e la compatibilità con nuove funzionalità di vSphere. Assicurati che siano aggiornati per tutte le VM critiche.
  • Datastore_Usage.csv: Fornisce una vista chiara dell’utilizzo dei datastore. Verifica che ci sia spazio sufficiente nel datastore di destinazione per le VM da migrare, considerando anche lo spazio temporaneo richiesto per operazioni come vMotion o Storage vMotion. Leggi anche: VMware Storage: Prova di Carico per 300+ VM
  • Host_Network_Config.csv: Dettaglia la configurazione di rete degli host ESXi. Controlla che i vSwitch e i port group siano configurati correttamente e che riflettano la topologia di rete desiderata nell’ambiente target. Discrepanze qui possono portare a problemi di connettività dopo la migrazione. Un approccio comune è usare la documentazione ufficiale VMware per la configurazione di rete.

Errori comuni e troubleshooting

  • Connect-VIServer fallisce: Controlla l’FQDN/IP del vCenter, le credenziali e la connettività di rete dalla macchina che esegue lo script. Assicurati che il firewall non stia bloccando la porta 443 (HTTPS) verso vCenter.
  • Permessi insufficienti: Se lo script non riesce a recuperare tutte le informazioni, è probabile che l’utente utilizzato non abbia i permessi necessari. Verifica i ruoli e i privilegi assegnati all’utente su vCenter Server. Sono necessari permessi di lettura su VM, Host, Datastore e Network.
  • Modulo PowerCLI non trovato: Se ricevi errori relativi a cmdlet sconosciuti (Get-VM, Connect-VIServer), assicurati che il modulo VMware.PowerCLI sia correttamente installato e importato nella sessione PowerShell.
  • Output CSV vuoto o incompleto: Potrebbe indicare problemi di connessione a vCenter (anche se Connect-VIServer ha avuto successo) o permessi limitati. Riprova la connessione e verifica i log di vCenter per errori.

FAQ — Domande Frequenti

Questo script può essere eseguito in produzione senza rischi?

Sì, lo script esegue solo operazioni di lettura (Get-*) e non apporta modifiche all’ambiente vSphere. È sicuro da eseguire in un ambiente di produzione. Tuttavia, come buona pratica, esegui sempre qualsiasi script prima in un ambiente di test o con un utente con privilegi minimi per familiarizzare con l’output.

È possibile personalizzare l’output o aggiungere altre verifiche?

Assolutamente sì. Questo script è una base. Puoi modificarlo per includere controlli specifici del tuo ambiente, come la verifica di determinate versioni di Guest OS, la presenza di dispositivi USB passthrough, o la configurazione di vGPU. Ogni Get-* cmdlet di PowerCLI offre una vasta gamma di proprietà e filtri.

Come posso automatizzare l’esecuzione di questo script regolarmente?

Puoi schedulare l’esecuzione dello script utilizzando il Task Scheduler di Windows o cron su Linux (se usi PowerShell Core) su una macchina dedicata. È consigliabile redirigere l’output della console in un file di log e inviare i report CSV via email per una revisione periodica automatizzata.

Qual è la differenza tra PowerCLI e vSphere API?

PowerCLI è un’interfaccia a riga di comando basata su PowerShell che si interfaccia con le vSphere API. Le vSphere API (Application Programming Interface) sono il set di interfacce di programmazione sottostanti che vCenter Server espone per l’interazione programmatica. PowerCLI semplifica l’interazione con queste API, fornendo cmdlet facili da usare.

Conclusioni con takeaway operativi

La preparazione è il pilastro di ogni migrazione vSphere di successo. Questo script PowerShell ti fornisce un framework robusto per automatizzare la fase di pre-check, trasformando un processo potenzialmente disordinato in una serie di passi chiari e documentati. Investire tempo nella pre-analisi significa ridurre drasticamente i rischi di downtime e garantire una transizione fluida dei tuoi carichi di lavoro. Non affidarti al caso: verifica, documenta e pianifica ogni dettaglio per proteggere la continuità operativa.

Fonti

Aggiornato: Settembre 2026

Condividi questo articolo:

Scritto da

Rosario Giordano

Rosario Giordano è System Administrator e consulente IT specializzato in cybersecurity e cloud, con oltre 20 anni di esperienza nella gestione di infrastrutture Linux enterprise. Le sue aree di competenza includono hardening di SSH, piattaforme Kubernetes, database PostgreSQL, ambient i virtualizzati VMware e Proxmox, nonché la conformità ai framework di sicurezza NIS2 e ISO 27001.