PowerCLI script to sequentially Storage vMotion VMs from a CSV File
This is a PowerCLI script that I use to Storage vMotion (s/vmotion) VMs from an input file (CSV File). This helps me evacuate VMs from a datastore that will be decommissioned and this serves like an automation. With this, I do not have to log back to vCenter and manually do storage migrations. This also have a lesser performance impact compared to simultaneously queuing storage migrations manually in case this will be done on non-peak hours.
1
2
3
4
5
6
7
8
|
$VMsToRelocate = Import-Csv "ListOfVMsToRelocate.csv" $Datastore = Get-Datastore -Name "datastore_name" foreach ( $VM in $VMsToRelocate ) { Write-Host "Relocating VM:" $VM .Name "to" $Datastore Get-VM -Name $VM .Name | Move-VM -datastore $Datastore > $null } Write-Host "Completed!" |
Note that the CSV file must have a Header called Name, below is an example.
1
2
3
4
|
Name VM1 VM2 VM3 |
If you want to export the list of VMs that you want to migrate, you can use RV Tools to generate a VM Inventory, export the list to MS Excel, do your filtering there (such as filter by the storage path), and I personally like to sort them by used size (in MB), then simply copy-paste to the CSV file. You do not need to create the CSV file in Excel, I use Notepad++.