I had to move a number of clusters into a different Virtual Center and I didn’t want to have to deal with manually moving VMs into their correct folders. In my case I happened to have matching folder structures in both vCenters and I didn’t have to worry about creating an identical folder structure on the target vCenter. All I need to do was to record the current folder location and move the VM to the correct folder in the new vCenter.
I first run this script against the source cluster in the source vCenter. It generates a CSV file with the VM name and the VM folder name
$VMCollection = @() Connect-VIServer "Source-vCenter $CLUSTERNAME = "MySourceCluster" $vms = Get-Cluster $CLUSTERNAME | Get-VM foreach ( $vm in $vms ) { $Details = New-Object PSObject $Details | Add-Member -Name Name -Value $vm.Name -membertype NoteProperty $Details | Add-Member -Name Folder -Value $vm.Folder -membertype NoteProperty $VMCollection += $Details } $VMCollection $VMCollection | Export-CSV "folders.csv" |
Once the first script is run, I disconnect each host from the old vCenter and add it into a corresponding cluster in the new vCenter. I can now run this command aginst the new vCenter to ensure the VMs go back into their original folders.
Connect-VIServer "Dest-vCenter" $vmlist = Import-CSV "folders.csv" foreach ( $vm in $vmlist ) { $vm.Name $vm.Folder Move-VM -VM $vm.Name -Destination $vm.Folder } |
PJ
Great script, greatly appreciated! Worked like a champ!
Ron Reyer
Hi Patrick,
You have some great advice on your blog. Please consider this request to allow me to follow on G+ or other social aggregation site.
Ron
pkremer
Thanks Ron! I don’t do much with G+ but I’m on Twitter @KremerPatrick