PowerCLI 5.1 - VMDK online convert THICK to THIN
Verfasst: 23.12.2012, 17:55
Hab ein kleines PowerCLI Script geschrieben welches alle THICK Festplatten online (ohne VM auszuschalten) nach THIN convertiert.
Die Zeile "ForEach ($VM in Get-VM) {" kann durch "ForEach ($VM in Get-VM "VMNAME") {" ersetzt werden um nur eine bestimmte VM zu bearbeiten.
Hierfür wird ein zweiter Datastore benötigt, die VMDKs liegen am Ende wieder am selben Ort wie vor dem Convert (Auch wenn die VM HDDs auf verschiedenen Datastores hat).
Viel Spaß damit, hoffe es hilft dem ein oder anderen...
Die Zeile "ForEach ($VM in Get-VM) {" kann durch "ForEach ($VM in Get-VM "VMNAME") {" ersetzt werden um nur eine bestimmte VM zu bearbeiten.
Hierfür wird ein zweiter Datastore benötigt, die VMDKs liegen am Ende wieder am selben Ort wie vor dem Convert (Auch wenn die VM HDDs auf verschiedenen Datastores hat).
Viel Spaß damit, hoffe es hilft dem ein oder anderen...
Code: Alles auswählen
$TempDatastore = "MySecondDatastoreName"
$ProgressPreference = "SilentlyContinue"
$WarningPreference = "Continue"
$ConfirmPreference = "None"
$ErrorActionPreference = "Continue"
ForEach ($VM in Get-VM) {
$WriteVM=$true
$VMDK_Name = @()
$VMDK_Path = @{}
ForEach ($HDD in $VM.HardDisks | ?{$_.StorageFormat -ne "Thin"}) {
If($WriteVM) { $WriteVM=$false; Write-Host -fore magenta "`nProcessing VM '$VM' ..."; }
$OriginalDatastore = $HDD.Filename -Replace '\[(.+)\].*',"`$1"
if ($OriginalDatastore -notmatch $TempDatastore) {
$VMDK = $HDD.Filename -Replace '.+/(.+)$',"`$1"
$VMDK_Name += $VMDK
$VMDK_Path.Add($VMDK,$OriginalDatastore)
Write-Host -fore yellow "Moving '$($HDD.Filename)' temporarily to '$TempDatastore' ..."
Move-HardDisk -HardDisk $HDD -Datastore $TempDatastore -StorageFormat thin
}
}
$VM = Get-VM $VM
ForEach ($HDD in $VM.HardDisks) {
$VMDK = $HDD.Filename -Replace '.+/(.+)$',"`$1"
if( $VMDK_Name -contains $VMDK ) {
$OriginalDatastore = $VMDK_Path.Get_Item($VMDK)
Write-Host -fore green "Moving '$($HDD.Filename)' back to '$OriginalDatastore' ..."
Move-HardDisk -HardDisk $HDD -Datastore $OriginalDatastore -StorageFormat thin
}
}
}