Esportazione Automatizzata di una VM in OVF/OVA da vCenter con PowerCLI e OVF Tool

di | Set 7, 2026 | 0 commenti

 

Quando si amministrano ambienti virtualizzati su VMware vSphere, capita spesso di dover esportare una VM come pacchetto OVF/OVA — ad esempio per un backup “a freddo”, per spostarla su un altro sito, o per consegnarla a un fornitore/partner come immagine autonoma. Dal client vSphere l’operazione è semplice: tasto destro sulla VM, “Export System Image”, e — se serve un pacchetto davvero fedele all’originale si spuntano le opzioni avanzate “Include BIOS UUID”, “Include MAC addresses” e “Include extra configuration”.

Il problema nasce quando questa esportazione va ripetuta più volte, magari su VM diverse o su vCenter diversi, e si vuole evitare di rifare manualmente tutti i click ogni volta — con il rischio di dimenticare proprio una di quelle tre checkbox avanzate, che sono facili da tralasciare ma spesso indispensabili (ad esempio per VM di sincronizzazione/DR che devono mantenere lo stesso BIOS UUID e gli stessi MAC address quando vengono re-importate altrove). Lo script che segue automatizza l’intero processo da PowerShell, usando PowerCLI per il lookup della VM e la gestione dello stato di accensione, e VMware OVF Tool per l’export vero e proprio — perché è l’unico strumento che espone il flag –exportFlags necessario per includere quelle opzioni avanzate. Il cmdlet PowerCLI Export-VApp, da solo, non le supporta.

 

PREREQUISITI

  • PowerShell 5.1 o superiore, su Windows.
  • Modulo VMware.PowerCLI (lo script lo installa automaticamente per l’utente corrente se non è già presente).
  • VMware OVF Tool installato sulla macchina che esegue lo script. Non è incluso in PowerCLI: va scaricato a parte dal portale supporto Broadcom/VMware. Percorso tipico di installazione: C:\Program Files\VMware\VMware OVF Tool\ovftool.exe.
  • Accesso in scrittura al percorso di destinazione (locale o condivisione UNC).
  • Permessi su vCenter sufficienti per l’export: ruolo Administrator, oppure un ruolo custom con i privilegi Virtual machine > Provisioning > Allow disk access / Allow read-only disk access.

NOTA BENE: per installare PowerCLI manualmente, da una console PowerShell (non necessariamente elevata, basta lo scope utente) eseguire:

 

 

FUNZIONALITÀ DELLO SCRIPT

Lo script fa le seguenti cose:

  • Chiede quale vCenter usare tramite un menu (1/2/3), oppure accetta la scelta come parametro per esecuzioni non interattive.
  • Chiede il nome esatto della VM da esportare, se non passato come parametro.
  • Si autentica sempre con l’utente Windows correntemente loggato sulla macchina: nessuna username da digitare. Prova prima l’autenticazione SSO/SSPI silenziosa (zero prompt); se il vCenter non ha questa funzionalità abilitata lato SSO, ricade automaticamente su un prompt Get-Credential già precompilato con l’utente corrente.
  • Riusa la stessa credenziale raccolta per PowerCLI anche per ovftool, evitando di chiederla una seconda volta. Se invece l’SSO/SSPI di PowerCLI ha funzionato (zero prompt), per ovftool resta comunque necessaria una password, perché — a differenza di PowerCLI — non ha alcun equivalente dell’autenticazione integrata di Windows: è un limite del tool, non dello script.
  • Verifica che la destinazione sia scrivibile prima di toccare vCenter (fail-fast), creando la cartella se non esiste.
  • Individua la VM su vCenter e ne controlla lo stato di accensione.
  • Spegne opzionalmente la VM prima dell’export, per garantirne la consistenza: prova prima uno shutdown “gentile” del guest OS (via VMware Tools), e solo se non va a buon fine entro un timeout ricorre a uno spegnimento forzato (Stop-VM).
  • Esegue l’export vero e proprio con ovftool, includendo per default tutte e tre le opzioni avanzate (–exportFlags=mac,uuid,extraconfig), replicando esattamente quanto fa il client vSphere con “Enable advanced options” spuntato su tutte e tre le voci.
  • Riaccende la VM al termine, se richiesto e se era accesa prima dell’intervento dello script.
  • Supporta -WhatIf / -Confirm su tutte le operazioni che modificano lo stato (spegnimento/accensione, scrittura dei file), così è possibile simulare l’esecuzione prima di lanciarla sul serio.
  • Tiene un log timestampato di tutta l’operazione su file, oltre che a video.

Per impostazione predefinita lo script non spegne la VM: esporta lo stato “a caldo” (ovftool esegue comunque l’export, ma senza garanzia di consistenza applicativa se non c’è un quiescing via VMware Tools). Per un export garantito consistente si usa il parametro -PowerOffFirst (con eventuale riaccensione al termine tramite -PowerOnAfter).

SCRIPT COMPLETO

 

COME SI USA

Modalità completamente interattiva lo script chiede tutto:

Mostra il menu di scelta del vCenter, chiede il nome della VM, e poi procede con l’export “a caldo” nella cartella di destinazione di default.

Esecuzione non interattiva, con spegnimento pre-export, riaccensione automatica al termine e sovrascrittura di eventuali file già presenti:

In questo caso l’unico prompt possibile è quello per le credenziali, e solo se necessario (SSO/SSPI non disponibile sul vCenter, oppure per ovftool come spiegato sopra).

Simulazione senza toccare nulla, utile prima di lanciare l’export su una VM di produzione:

Export in formato OVA (un unico file) invece della cartella OVF+VMDK+MF:

 

OUTPUT ATTESO

Durante l’esecuzione, lo script produce un log a video (e su file, con lo stesso nome timestampato Export-VM-OVF_yyyyMMdd_HHmmss.log) simile a questo:

[2026-08-30 10:12:03] [INFO] ==================== EXPORT VM: SRV-PROD-SYNC-01 ====================
[2026-08-30 10:12:03] [INFO] Destinazione : \\fileserver01.azienda.local\export\ProgettoX (formato Ovf, exportFlags: mac,uuid,extraconfig)
[2026-08-30 10:12:03] [OK] File di destinazione: \\fileserver01.azienda.local\export\ProgettoX\SRV-PROD-SYNC-01\SRV-PROD-SYNC-01.ovf
[2026-08-30 10:12:05] [OK] Connesso a vcenter02.azienda.local come AZIENDA\mario.rossi (SSO)
[2026-08-30 10:12:06] [OK] VM trovata: SRV-PROD-SYNC-01 — Stato: PoweredOn — Host: esxi-host-03.azienda.local
[2026-08-30 10:12:06] [WARN] La VM è ACCESA e verrà esportata ‘a caldo’.
[2026-08-30 10:12:07] [INFO] Avvio ovftool (exportFlags: mac, uuid, extraconfig)…
[2026-08-30 10:14:52] [OK] Export completato con successo (BIOS UUID, MAC addresses ed extra configuration inclusi).
[2026-08-30 10:14:52] [OK] File presenti a destinazione: 3
[2026-08-30 10:14:52] [INFO] – SRV-PROD-SYNC-01.ovf (0 GB)
[2026-08-30 10:14:52] [INFO] – SRV-PROD-SYNC-01.mf (0 GB)
[2026-08-30 10:14:52] [INFO] – SRV-PROD-SYNC-01-disk1.vmdk (24.13 GB)
[2026-08-30 10:14:53] [OK] Disconnesso da vcenter02.azienda.local
[2026-08-30 10:14:53] [OK] ==================== EXPORT COMPLETATO ====================

Nella cartella di destinazione si troverà quindi il file descrittore .ovf, il manifest .mf con i checksum, e uno o più .vmdk con i dischi virtuali (oppure un unico .ova se è stato usato -Format Ova) — pronti per essere re-importati altrove mantenendo BIOS UUID, MAC address e configurazione extra della VM originale.

 

CONSIDERAZIONI FINALI

Il punto centrale dello script è la combinazione di due strumenti che da soli non basterebbero: PowerCLI per parlare con vCenter in modo “nativo” (lookup della VM, stato di accensione, percorso di inventory) e ovftool per l’export vero e proprio, perché è l’unico dei due a esporre le opzioni avanzate del formato OVF.

Vale la pena ricordare che ovftool va installato separatamente (non arriva con PowerCLI) e che, autenticazione SSO a parte, resta comunque legato a un flusso utente/password classico  un limite intrinseco dello strumento di cui è bene tenere conto quando si progettano automazioni di questo tipo su più vCenter.

 

Articoli Recenti

Veeam Backup

Monitoring

Friends

  • My English Lab  English School
  • ChrSystem   Servizi ICT
  • Since 01  Kreative Graphics

Database

Networking

Autori

  • Raffaele Chiatto  Amministratore
  • Marco Valle  Autore
  • Angelo Lauria  Autore
  • Edoardo Prot  Autore
  • Davide D'Urso  Autore
Angelo Lauria

Angelo Lauria

Sono Angelo Lauria e ho una passione per l’automazione e lo scripting, soprattutto con Bash e PowerShell. Il mio viaggio nello scripting è iniziato per curiosità, spinto dal desiderio di rendere più efficienti i processi quotidiani. Oggi continuo ad affrontare ogni nuova sfida come un'opportunità per crescere e migliorare. Credo che l’informatica sia un campo in continua trasformazione, e il bello sta proprio nell’essere sempre pronti a evolversi insieme a essa.

Related Post

0 Commenti

Invia Un Commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Virtualizzazione

Linux

Microsoft

Apple

Backup

Database

Security

Automazione