I was working with one of my customer where was was trying to migrate mailboxes in batch and it was stuck in 95% / completing state.
Symptom: While moving the mailbox in batches to Exchange 2013 you may end up in a situation where MigrationBatch is in completing state and fore completion does not work (Complete-migration batch hangs on completing).
Finalize a migration batch for a local move, cross-forest move, or remote move migration that has successfully finished initial synchronization.
You need to be assigned permissions before you can run this cmdlet. Although all parameters for this cmdlet are listed in this topic, you may not have access to some parameters if they're not included in the permissions assigned to you. To see what permissions you need, see the "Mailbox move and migration permissions" section in the Recipients Permissions topic in Microsoft Technet.
- Verify the MigrationBatch status:
Get-MigrationBatch –identity “BatchName”
- Verify the mailbox move status:
Get-MoveRequest | Get-MoveRequestStatistics
- Verify resource policy is disable using below cmdlet for “mdblatency”:
Get-ResourcePolicy -Resource mdblatency
- If resource policy for mdblatency is set to True then set it to disable:
Get-ResourcePolicy mdblatency | Set-ResourcePolicy -enabled:$false
- Verify the reason for failing mailbox migration.
- If you see below message follow step 7.
Message : Informational: The move request for mailbox
588b1037-0983-4af3-aa35-1dd01b985685 is ready to complete and has been
automatically suspended because the SuspendWhenReadyToComplete parameter is
set to $true.
- If everything is fine force the migrationbatch to completion:
Complete-MigrationBatch –Identity “BatchName”
- If step 7 fails then remove the migration batch using below cmdlet:
(Get-MigrationBatch)[-2..-1] | Remove-MigrationBatch -Force
Note: Is the batch number.  is the first one and [-1] is the last one in the batch list.
- Restart the MRS services on CAS server.
- Resumed move request for one of the user using below cmdlet:
Get-MoveRequest -Identity "MailboxName") | Resume-MoveRequest
Get-MoveRequest | Resume-MoveRequest
- Allow sometime and verify move request using below cmdlet for the specific user.
(Get-MoveRequest -Identity "MailboxName")
- You will see the status of move in “Completed” state.
- Issue Resolved.
After a migration batch for a local or cross-forest move has successfully run and has a status state of Synced, use the Complete-MigrationBatch cmdlet to finalize the migration batch. Finalization is the last phase performed during a local or cross-forest move. When you finalize a migration batch, the cmdlet does the following for each mailbox in the migration batch:
- Runs a final incremental synchronization.
- Configures the user's Microsoft Outlook profile to point to the new target domain.
- Converts the source mailbox to a mail-enabled user in the source domain.
When the finalization process is complete, you can remove the batch by using the Remove-MigrationBatch cmdlet.
If a migration batch has a status of Completed with Errors, you can rerun the Complete-MigrationBatch cmdlet. The cmdlet will attempt to finalize the failed users.
- Exchange 2007 to Exchange 2013
- Exchange 2010 to Exchange 2013