Here's the command to move a mailbox from one database to another database:
New-MoveRequest foo.user -TargetDatabase "Mailbox XYZ"
Here's how to do a batch based on last name letter:
Get-mailbox -Database "Mailbox-Foo1" -ResultSize Unlimited |get-recipient -RecipientType UserMailbox -Filter {lastname -like 'h*'} |get-mailbox |New-MoveRequest -TargetDatabase "Mailbox-Foo2" -BatchName "Foo-batch"
Here are the diagnostic short list:
get-moverequest
get-moverequeststatistics
remove-moverequest foo.user
(get-moverequest).count
SPEED TWEAKS ON HOW TO MOVE MAILBOXES FASTER
I have found that moves are slow unless they are set as EMERGENCY. Here's how:
set-MoveRequest foo.user -priority emergency
Also, some have found that turning off the MRS (throttling) improves performance. I haven't tried it. Here's how:
reg query "HKLM\SYSTEM\CurrentControlSet\services\MSExchange ResourceHealth" /v MRS
:: TURN OFF MRS
echo y | reg add "HKLM\SYSTEM\CurrentControlSet\services\MSExchange ResourceHealth" /v MRS /d 0
:: STOP EXCHANGE REPLICATION SERVICE
sc stop MSExchangeRepl
:: TURN ON MRS
echo y | reg add "HKLM\SYSTEM\CurrentControlSet\services\MSExchange ResourceHealth" /v MRS /d 1
:: START EXCHANGE REPLICATION SERVICE
sc start MSExchangeRepl
SEE WHAT'S HAPPENING
Here's how to see how the full list:
Get-moverequest |get-moverequeststatistics |sort-object -Property PercentComplete -descending
Here's how to see how many have finished:
(Get-MoveRequest -movestatus completed).count
Here's how to see how many are in progress:
(Get-MoveRequest -movestatus inprogress).count
Here's how to see how the normal-moves are going:
Get-moverequest -movestatus inprogress |get-moverequeststatistics |sort-object -Property PercentComplete -descending
Here's how to see how the emergency-moves are going:
Get-moverequest -movestatus inprogress -flags highpriority |get-moverequeststatistics |sort-object -Property PercentComplete -descending
WHAT TO DO WITH "FAILED" MOVES
If move requests fail, you can see why. Here's how:
get-moverequeststatistics -includereport foo.user |fl
Usually a single bad item. You can set the move to raise the badlimit just a little and restart the move with the following:
get-moverequest foo.user |set-moverequest –baditemlimit 10 -priority emergency
resume-moverequest foo.user