Here is some example code for migrating from one LUN to another. The first example does them all at once which is likely to overload your I/O capacity, but I wanted to include it to show how a slightly different construct ends up with potentially bad results.
There are potential optimizations to the code, but this simple method should be good enough.
# Storage VMotion ALL VMs from one LUN to another (All at the same time) COULD BE BAD
Get-Datastore "sourceDS" | Get-VM | Move-VM -Datastore (Get-Datastore "destDS")
# Storage VMotion ALL VMs from one LUN to another (One at a time)
Get-Datastore "sourceDS" | Get-VM | ForEach-Object {Move-VM -VM $_ -Datastore (Get-Datastore "destDS")}