lunedì 12 gennaio 2009

Hyper-V Script - Identificare le VM connesse ad una Virtual Network con Powershell

powersh Lavorando con una infrastruttura Virtuale abbastanza complessa, con diverse VM e Virtual Network, vi sarà sicuramente capitato di trovarvi nella situazione di dover eliminare una Virtual Network.
Se avete ben documentato la vostra infrastruttura virtuale saprete sicuramente quale VM erano/sono connesse alla Virtual Network che vi apprestate ad eliminare. Già adottare una chiara toponomastica aiuta molto.
Nel caso in cui non abbiate documentato la vostra infrastruttura, oppure vi troviate ad intervenire su una infrastruttura preesistente da un cliente e volete fare ordine...Vi troverete nella situazione di chiedervi: quali VM sono connesse ad una Virtual Network ?

Quali strumenti mette a disposizione Hyper-V?
1. Virtual Network Manager
2. Virtual Machine Settings
3. Powershell

1. Virtual Network
Virtual Network Manager
di Hyper-V non aiuta molto in quanto, chi ha avuto gia' modo di lavorarci, non fornisce questo tipo di informazione. Possiamo solo creare/configurare/eliminare gli oggetti Virtual Network, poco altro. Il livello di informazioni fornite sulla infrastruttura  è pari a ZERO. Non fa al nostro caso.

01

Attenzione: Virtual Network Manager vi permette di eliminare VN in uso senza chiedervi conferma. Una volta selezionata la VN, fatto clic su Remove | OK. Ciao Ciao... Ricrearla con lo stesso nome non serve!


2. Virtual Machine Settings

Tramite Hyper-V Manager dovremmo andare ad analizzare la configurazione di ciascuna VM per vedere a quali Virtual Network è connessa. Operazione che, se si tratta di poche VM, possiamo ancora fare a mano ma, nel caso in cui le VM siano tante - nemmeno poi tante a dir la verità - non arrivate alla terza VM che vi siete belli che stufati. Se poi condiamo il tutto con le classiche distrazioni del caso, si rischia di fare, inutilmente, una frittata. Quindi la modalità, per quanto fattibile, risulta poco pratica e soggetta ad errore (umano).

02 

3. Powershell

Per risolvere questo problema ed eliminare con sicurezza una Virtual Network basta utilizzare Powershell. Basta utilizzare la Hyper-V Management Library, disponibile gratuitamente su CodePlex, e qualche concetto sul funzionamento di Powershell.
Una volta caricata la Hyper-V Management Library sul nostro server Hyper-V, basterà eseguire, con i privilegi amministrativi, il seguente comando:

PS C:\Users\Administrator> Get-VM -server MT-HPV | List-VMNic | foreach ($_) { if ($_.Network -eq "vLAN") { write-host $_.VM }}

dove:
MT-HPV è il server Hyper-V, se lo eseguite direttamente su Hyper-V non è necessario.
vLAN  è il nome della Virtual Network che vogliamo eliminare.

Una volta lanciato il comando Powershell, sarà restituito l'elenco delle VM che sono connesse alla Virtual Network vLAN. Di seguito uno screeshot del risultato:

00
Nel mio caso l'eliminazione della Virtual Network vLAN avrebbe disconnesso ben 10 VM...un bel problema!! 

Nota:
Le VM elencate sono tutte quelle connesse alla Virtual Network vLAN, indipendentemente dal loro stato (in esecuzione, spenta o in pausa). 

Per domande, commenti, suggerimenti sul forum di VMexperts.org

Luca

Luca Conte, MCSE/MCSA:Security, MCT, VMWare VCP
Consulting Services & Professional Training
Virtualization Discovery - http://www.virtualizationdiscovery.com
Virtualization Technical Days - http://days.virtualizationdiscovery.com


Riferimenti
CodePlex - Open Source Project Community
PowerShell management Library for Hyper-V
Ricavare il GUID delle VM con Powershell
Home Page Powershell
KB952627 - Description of the Windows Vista Service Pack 1 Management Tools update for the release version of Hyper-V


Download

Download Download PowerShell management Library for Hyper-V
Download

Download RSAT for Windows Vista Service Pack 1 (32-bit) Edition.

Download

Download RSAT for Windows Vista Service Pack 1 (64-bit) Edition.

Download

Download the Update for Windows Vista (32-bit).

Download

Download the Update for Windows Vista (64-bit).

Etichette: , , , ,