Creare le macchine virtuali Hyper-V attraverso Powershell

Powershell per creare da remoto le macchine virtuali Hyper-V
L’uso delle macchine virtuali è molto frequente per implementare diverse tipologie di servizi presso un cliente, senza dover necessariamente aggiungere un server o un computer dedicato. Un caso frequente è quello del classico Microsoft SQL Server necessario per gestire piccoli servizi interni, dove una macchina virtuale evita di installare un server dedicato e l’impiego della versione per Linux limita la necessità di risorse hardware.
Tornando all’oggetto necessario per la virtualizzazione, per quanto non sia da tutti amato, uno degli strumenti di virtualizzazione esistenti e molto utilizzato è Microsoft Hyper-V.
L’uso di questo strumento mette a disposizione un consistente numero di comandi con il modulo di gestione Powershell, con i suoi cmdlet è possibile svolgere anche da remoto tutte le operazioni previste per la console di gestione e anche qualcuna in più.
Vogliamo condividere con voi il modo in cui creaimo delle nuove macchine virtuali usando Powershell, una situazione che si verifica molto spesso per la creazione di piattaforme di test.
Tabella dei Contenuti
Powershell e le nuove macchine virtuali
La procedura di creazione richiede degli step secondo una specifica sequenza, che andiamo ad approfondire nel seguito. Nelle prime realizzazioni si può incappare in qualche errore, ma nulla di irrimediabile, basta cancellare la macchina virtuali e ripartire.
È inutile dire che abbiamo integrato in un RMM la procedura di creazione delle macchine virtuali e tutto quanto concerne il controllo del loro funzionamento.
Iniziamo!
Il commutatore virtuale
Un elemento fondamentale per permettere la connessione della macchine virtuale alla rete è la presenza del commutatore virtuale, se non esiste è necessario crearne uno prima di iniziare con le attività di configurazione, per questa operazione si utilizza il cmdlet New-VMSwitch.
New-VMSwitch -name EthernetAdapter -NetAdapterName Ethernet -AllowManagementOS $true
Nell’esempio viene creato un adattatore di rete visibile dal sistema operativo Host e denominato EthernetAdapter.
Il nome assegnato al commutatore virtuale è necessario per procedere con le successive configurazioni.
Registrazione della macchina virtuale
Noto il commutatore virtuale è possibile procedere con la registrazione della macchina virtuale, che consiste nella creazione dello scheletro a cui si agganceranno i vari elementi.
A tale scopo si utilizza il cmdlet New-VM che richiede alcuni parametri:
- nome della macchina virtuale ($NameVM);
- memoria assegnata ($MemorySize);
- percorso del disco del host dove ospitare la macchina virtuale ($PathVM);
- generazione della macchina virtuale ($Generation);
- commutatore virtuale, se omesso la macchina virtuale sarà isolata dalla rete ($NetworkSwitch).
New-VM -Name $NameVM -MemoryStartupBytes $MemorySize -Path $PathVM -Generation ([INT]$Generation) -Switch $NetworkSwitch
Creazione e associazione dei dischi virtuali
Una macchina virtuale ha bisogno di almeno un disco sui cui installare il sistema operativo, per procedere alla sua creazione si utilizza il cmdlet New-VHD, dopo la creazione il disco dovrà essere messo a disposizione della macchina virtuale con il cmdlet Add-VMHardDiskDrive.
Per praticità abbiamo deciso di assegnare ai nomi dei dischi un prefisso strandard, che è banalmente DISKVM_ con l’aggiuntà di un numero progressivo.
Anche in questo caso sono necessari dei parametri, in aggiunta rispetto ai precedenti:
- il percorso che ospita le macchine virtuali ($PathVM);
- il nome della macchina virtuale ($NameVM);
- il percorso che ospista i file dei dischi ($PathDisk), creato dinamicamente dallo script;
- la dimensione dei dischi ($DiskSize);
Nell’esempio intendiamo collegare tre dischi dinamici alla macchina virtuale e li identifichiamo con la lista delle loro dimensioni separate da virgola.
$DiskSize = Size0,Size1,Size2
$DiskNumber = 0
$DiskSize = $DiskSize.split(",")
foreach ($Disk in $DiskSize) {
$PathDisk = $PathVM + "\" + $NameVM + "\Virtual Hard Disks\DiskVM_" + $DiskNumber + ".vhdx"
New-VHD -Path $PathDisk -SizeBytes $Disk -Dynamic
Add-VMHardDiskDrive -VMName $NameVM -Path $PathDisk
$DiskNumber++
}
La prima riga costituisce uno dei parametri forniti allo script e con la seconda riga viene inizializzato il contatore del numero di dischi associati.
La riga tre estrapola dal parametro le diverse dimensioni fornite, creando un array.
Il ciclo dalla riga 4 alla riga 9 crea e associa alla macchina virtuale un disco virtuale per ogni dimensione fornita. Nello specifico alla riga 6 è creata una variabile contenente il percorso dove deve essere salvato il file del disco e il suo nome, a seguire viene creato il file del disco e associato alla macchina virtuale. La riga 8 invrementa il contatore dei dischi, il cui valore è utilizzato alla riga 6 per la creazione del percorso di salvataggio.
Associazione di un’immagine ISO per il boot
La macchina virtuale creata può aver bisogno di un sistema operativo e se è disponibile la sua immagine ISO si può procedere con il suo aggancio come DVD, così che al primo avvio inizi la sua installazione. Per questa operazione si ricorre al cmdlet Set-VMDvdDrive.
È fondamentale che l’immagine ISO sia disponibile nel sistema operativo Host e che sia raggiungibile.
In questo caso i parametri necessari sono:
- nome della macchina virtuale (NameVM);
- percorso completo dell’imagine ISO e del suo nome ($PathISO).
Set-VMDvdDrive -VMName $NameVM -ControllerNumber 1 -Path $PathISO
Avvio e stato della macchina virtuale
Dopo aver creato la macchina virtuale è possibile avviarla e richiedere informazioni sul suo stato, i cmdlet per queste azioni sono Start-VM e Get-VM, entrambi richiedono il nome della macchina virtuale su cui procedere, l’omissione del nome porterebbe all’esecuzione dei cmdlet su tutte le macchine virtuali presenti o ad un errore di esecuzione per il primo.
Start-VM -Name $NameVM
Get-VM $NameVM
Per approfondimenti relativi agli avvii e spegnimenti delle macchine virtuali Hyper-V rimandiamo all’articolo HyperV power tool.
Qualche intoppo con la scrittura dei byte
Automatizzare la creazione delle machine virtuali può essere di grande aiuto; tuttavia, non è tutto oro quello che luccica; infatti, l’assegnazione degli spazi di memoria e dei dischi è legata a dei vincoli di incremento di 1024, questo comporta che l’inserimento di un valore non previsto si risolva con un errore di esecuzione del relativo cmdlet, oppure all’allocazione di spazi diversi da quelli specificati.
Può essere utile fornire le dimensioni di questi elementi sfruttando delle stringhe del tipo 512MB o 2TB, che con l’opportuno codice potranno essere trasformate negli appropriati valori, senza il rischio di perdere qualche zero.
$Unit = $FValue.SubString($FValue.length - 2, 2)
$Number = $FValue.Substring(0, $FValue.length - 2)
$Number = [INT]$Number
switch ($Unit) {
MB {
$Number = $Number * 1024 * 1024
}
GB {
$Number = $Number * 1024 * 1024 * 1024
}
TB {
$Number = $Number * 1024 * 1024 * 1024 * 1024
}
}
Il codice di esempio estrae dal valore specificato gli ultimi due caratteri per ottenere l’unità di misura (Riga 1) e la parte iniziale della stringa per avere il valore corrispondente allo spazio desiderato (Riga 2), dove quest’ultimo è poi convertito in un formato numerico (Riga 3).
Il metodo Switch permette di determinare il calcolo da eseguire in relazione all’unità di misura specificata.
Per maggiori informazioni sull’uso e la realizzazione degli script di automazione leggi questo articolo e contattaci senza impegno.
I componenti distribuiti sono forniti senza alcuna garanzia. Non vi sono garanzie che il software soddisfi le vostre esigenze o sia esente da errori. In nessun caso gli sviluppatori saranno responsabili per eventuali danni.
I componenti proposti sono stati collaudati nel modo più esaustivo possibile e sono utilizzati in modo regolare in ambienti di produzione, durante il loro utilizzo non si sono verificate anomalie di funzionamento.
Articoli recenti
- ShellBag – un viaggio allucinante nei ricordi di Windows
- La donazione di sangue nei cani: importanza, modalità e compatibilità
- Il Manto del Cane: Un Viaggio alla Scoperta della Sua Pelle e del Suo Pelo
- Proteggi il tuo cane dal caldo: prevenzione e riconoscimento della disidratazione
- Monitoraggio e Verifica delle Configurazioni di Rete: Una Soluzione Efficace con PowerShell e Datto RMM
Archivi
Prossimi eventi
Non ci sono eventi imminenti.