martedì 17 aprile 2018

Disconnect all CD Drives on all VMs of the Cluster

Problema
Spesso capita che gli utenti a seguito di installazioni e/o aggiornamenti lascino i CD agganciati alle VM, e questo può causare dei problemi. In caso di DRS attivo in modalità "Fully Automated" VMs con CD-ROM  attivi non migrano da un host all'altro; stessa condizione quando si ha la necessità di mettere in "Maintenance" un nodo.


Soluzione
Per risolvere il problema, si è deciso di creare due script in powershell. Il primo script "ListVMsWithDrive.ps1" per ottenere la lista delle VMs che ha i CD-ROM connessi producendo come output un file di testo che può essere editato ed utilizzato come input del successivo script "DisconnectDrive.ps1" per la rimozione dei CD-ROM dalle VM contenute nel file.

Di seguito lo script "ListVMsWithCDDrive.ps1" per avere una lista delle VMs con i CD-ROM connessi.

########################################################################################
#  File  : ListVMsWithCDDrive.ps1
#  Author: Lorenzo Moglie
#  Date  : 17.04.2018
#  Description : The output of the script is a txt file, containing the list of VMs with 
#                the CD-Rom configured for that cluster
#######################################################################################
$vCenter = "<VIRTUALCENTER>"
$CLS = "<CLUSTER-NAME>"
$User = "<USERNAME>"
$Password = "<PASSWORD>"
$VMlist = ".\VMlist.txt"
Connect-VIServer -Server $vCenter -User $User -password $Password | Out-Null
#List of VMs with CD-ROM connected for the whole vCenter
#Get-VM | Get-CDDrive | Where {$_.ISOPath -ne $null} | Sort-Object -Unique ParentID | FT -AutoSize Parent, IsoPath 
#List of VMs with CD-ROM connected only for the specified Cluster - Output on TXT file
#The file can be used as input od the script DisconnectDrive.ps1
Get-VM -Location $CLS  | Get-CDDrive | Where {$_.ISOPath -ne $null} | Sort-Object -Unique ParentID | FT -AutoSize Parent | Out-File $VMlist
#List of VMs with CD-ROM connected - Output on TXT file 
#The file can be used as input od the script DisconnectDrive.ps1
#Get-VM | Get-CDDrive | Where {$_.ISOPath -ne $null} | Sort-Object -Unique ParentID | FT -AutoSize Parent | Out-File $VMlist
Disconnect-VIServer * -Confirm:$false 

Di seguito lo script "DisconnectDrive.ps1" per disconnettere i CD-ROM


########################################################################################
#  File  : DisconnectDrive.ps1
#  Author: Lorenzo Moglie
#  Date  : 17.04.2018
#  Description : This script disconnect the CD-ROM from the VMs present in the input 
#                file
#######################################################################################
$vCenter = "<VIRTUALCENTER>"
$CLS = "<CLUSTER-NAME>"
$User = "<USERNAME>"
$Password = "<PASSWORD>"
$VMlist = ".\VMlist.txt"
Connect-VIServer -Server $vCenter -User $User -password $Password | Out-Null
foreach($VM in Get-Content $VMlist) {
    if ($VM -ne $null) {
        if (($VM.TrimEnd() -contains "Parent") -or ($VM.TrimEnd() -contains "------")){       
        } else {
            Get-VM -Name $VM.TrimEnd() |Get-CDDrive | Where {$_.ISOPath -ne $null} | Set-CDDrive -NoMedia -Confirm:$false 
        }
    }
}
Disconnect-VIServer * -Confirm:$false 
Si è deciso di creare due script proprio per avere la possibilità di decidere su quale VM andare o meno a rimuovere il CD-ROM.

Se non si ha questo tipo di necessità e si vuole disconnettere il CD-ROM sull'intero DataCenter è possibile lanciare il comando di seguito:

 Get-VM | Get-CDDrive | Where {$_.ISOPath -ne $null} | Set-CDDrive -NoMedia -Confirm:$false 



.

Nessun commento:

Posta un commento