Well, once again I hacked at the Powershell/PowerCLI the other day. Since we don’t yet have a Enterprise Plus license at work (which would support Datastore Maintaince and Storage DRS), I needed a way to empty one datastore and move all the content into another one, while enabling Thin-Provisioning.
So I googled for a bit, and actually found a few hints … So without further yada-yada, here’s the script I came up with:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| param( [string] $vCenter, [string] $datastore_old, $datastore_new )
# Add the VI-Snapin if it isn't loaded already
if ( (Get-PSSnapin -Name "VMware.VimAutomation.Core" -ErrorAction SilentlyContinue) -eq $null )
{
Add-PSSnapin -Name "VMware.VimAutomation.Core"
}
if ( !($vCenter) -or !($datastore_old) -or !($datastore_new) ) {
Write-Host `n "datastore-massmigrate-vms: <vcenter> <datastore_old> <datastore_new>" `n
Write-Host " datastore-massmigrate-vms moves all VMs residing on <datastore_old>"
Write-Host " to the datastore named <datastore_new>." `n
exit 1
}
# Turn off Errors
$ErrorActionPreference = "silentlycontinue"
Connect-VIServer -Server $vCenter
Write-Host "Migrating VMs from datastore" $datastore_old "to" $datastore_new
$vms = Get-VM -datastore $datastore_old
foreach ($vm in $vms) {
Write-Host "Moving" $vm "from" $datastore_old "to" $datastore_new
Move-VM $vm -Datastore $datastore_new
}
Disconnect-VIServer -server $vCenter -Confirm:$false
|
Initially I have something different, which was a bit shorter (based on Brian’s work), but it had a huge downside: If you have vRDMs (like I do), it converts every damn vRDM into a VMDK, so make sure you only run this script on a datastore on VMs that either have only pRDMs or VMs with only VMDKs.