Tuesday, July 23, 2024

Move Exchange 2010/2013 user to Exchange 2016

Abstract: During an Exchange 2010/2013 towards Exchange 2016 migration you need to move your users. As I normally move team by team I use some powershell commands & scripts which I would like to share here.

Move a single user:

New-MoveRequest -identity “joeblocks.1” -TargetDatabase EXCHMB1-SE-3GB


Check all move requests:


or if you prefer to get some more details:

Get-MoveRequest | Get-MoveRequestStatistics | select DisplayName,TargetDatabase,PercentComplete,StatusDetail

or even more:

Get-MoveRequest | Get-MoveRequestStatistics | select DisplayName,Alias,TargetDatabase,PercentComplete,StatusDetail


Clean all all completed move requests:

Get-MoveRequest -movestatus completed | remove-moverequest



Check failed migrations:
get-moverequeststatistics -identity “Joe Blocks” | fl
Get-MoveRequest <Identity> | Get-MoveRequestStatistics –IncludeReport | Export-Clixml c:\temp\moverequeststats.xml



Move a user and exclude corrupted elements:

Sometimes a user couldn´t be moved and if you run

Get-MoveRequest | Get-MoveRequestStatistics

You see an error like:

Error: This mailbox exceeded the maximum number of corrupted items that were specified for this move request.

You can then remove the move request via:


and run an

New-MailboxRepairRequest -Mailbox joeblocks.1 -CorruptionType ProvisionedFolder,SearchFolder,AggregateCounts,Folderview

towards the possible corrupted mailbox (as mentioned here).

If that didn´t solve the issue you can adjust the failed request and specify the amound of elements you will accept as datalost via:

set-moverequest -identity joeblocks.1 -BadItemLimit “1000” -AcceptLargeDataLoss
resume-moverequest -identity joeblocks.1

Or if you prefer to set that for all failed objects:

Get-MoveRequest -movestatus failed | set-moverequest -BadItemLimit “1000” -AcceptLargeDataLoss
Get-MoveRequest -movestatus failed |resume-moverequest


Move user imported from an CSV file:

Import-CSV “D:\Bastian\MigrationPacksAndLogs\*.csv” | foreach-object {New-MoveRequest -identity $_.UserAlias -TargetDatabase $_.Database}

The statement above can be used to import files created via (you only need to transform them correctly via MS Excel):

– The “Export Exchange user who didn´t logged in since some days” script from here.

– The “Get all Exchange user inclusive details from a list of AD groups” script from here.


Related Articles


Please enter your comment!
Please enter your name here

Stay Connected

- Advertisement -

Latest Articles