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:
Get-MoveRequest
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:
Remove-MoveRequest
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.