In Exchange Server 2013 mailbox moves are performed using move requests.
There are a variety of ways that move requests can be used to move mailboxes in an Exchange 2013 organization, with such options as:
- Moving individual mailboxes or batches of mailboxes
- Moving primary mailboxes with archive mailboxes or moving them seperately
- Completing moves immediately or suspending them for later completion
- How many bad (corrupt) mailbox items are able to be discarded before the migration fails
- Moving to a specific database or allowing Exchange to automatically choose a database
The Exchange 2013 servers will also apply their own intelligence to mailbox moves, slowing down or even halting a move if the server health is at risk (for example high CPU utilization).
Let’s take a look at some examples of mailbox moves using move requests in Exchange 2013.
Using the Exchange Admin Center to Move Mailboxes
For a single mailbox move you can begin the process from the mailboxes view. In the Exchange Admin Center navigate to Recipients -> Mailboxes and choose a mailbox that you wish to move. At the bottom of the right-hand side click the link to move mailbox to another database.
Alternatively, select the Migration view and start a new “Move to a different database”.
Select one or more mailboxes to be moved and click Next.
Give the migration batch a name, and choose the target database to move to. If no database is selected Exchange 2013 will automatically choose a target database for the move. Notice also that you can choose whether to move only the primary mailbox, archive mailbox, or both together. Click Next to continue.
Select a user to receive the email report for the move.
Choose whether to start the batch immediately or manually start it later. This option allows you to prepare your migration batches ahead of time and then manually start them when you are ready.
Finally, choose whether the move should automatically complete or should suspend when ready to complete, which requires you to manually complete it. When mailbox moves are processing the user can continue to access their mailbox right up to the point where the completion occurs, when they are disconnected briefly, so this option lets you control the timing of the completion to occur when it will be least disruptive to the end user.
Click New to begin the move request.
You can observe the progress of the migration batch in the Migration view in EAC.
When the migration is complete there may be a delay of several minutes due to Active Director replication between sites before the end user can reconnect to their mailbox, depending on where they are located relative to the Exchange servers.
Using Exchange Management Shell to Move Mailboxes
Here is an example of using PowerShell to manage mailbox move requests. In this case the mailboxes hosted on database MB-BR-01 are moved as a batch named “Branch Office Batch 1″. No target database is set so that Exchange 2013 can automatically distribute them between available databases. Also, SuspendWhenReadyToComplete is used to prevent automatic completion, so that it can be initiated at a later time outside of business hours.
[PS] C:\>Get-Mailbox -Database MB-BR-01 | New-MoveRequest -BatchName "Branch Office Batch 1" -SuspendWhenReadyToComplete DisplayName StatusDetail TotalMailboxSize TotalArchiveSize PercentComplete ----------- ------------ ---------------- ---------------- --------------- Wendy Fyson Queued 54.07 MB (56,698,964 b... 0 John Williams Queued 52.35 MB (54,889,436 b... 0 Alex Heyne Queued 90.71 MB (95,115,943 b... 955.9 KB (978,796 bytes) 0 Katherine Phipps Queued 54.63 MB (57,281,147 b... 0 Judith Rodrigues Queued 57.11 MB (59,880,427 b... 0 Olive Weeks Queued 53.52 MB (56,123,602 b... 0 Sonia Smith Queued 54.26 MB (56,894,534 b... 0 Sunset Room Queued 36.35 MB (38,113,922 b... 0 TestMB BR Queued 59.37 MB (62,256,579 b... 0 Joanne Rigby Queued 84.95 MB (89,079,670 b... 0
You can view the distribution of mailboxes across target databases using Get-MoveRequest.
[PS] C:\>Get-MoveRequest -BatchName "Branch Office Batch 1" DisplayName Status TargetDatabase ----------- ------ -------------- Wendy Fyson InProgress DB01 John Williams InProgress DB02 Alex Heyne InProgress DB02 Katherine Phipps InProgress DB02 Judith Rodrigues InProgress DB02 Olive Weeks InProgress DB02 Sonia Smith Queued DB02 Sunset Room Queued DB01 TestMB BR Queued DB02 Joanne Rigby Queued DB02
Progress can be monitored using the Get-MoveRequestStatistics cmdlet.
[PS] C:\>Get-MoveRequest -BatchName "Branch Office Batch 1" | Get-MoveRequestStatistics DisplayName StatusDetail TotalMailboxSize TotalArchiveSize PercentComplete ----------- ------------ ---------------- ---------------- --------------- Wendy Fyson CopyingMessages 54.07 MB (56,698,964 b... 29 John Williams CopyingMessages 52.35 MB (54,889,436 b... 29 Alex Heyne CopyingMessages 90.71 MB (95,115,943 b... 955.9 KB (978,796 bytes) 25 Katherine Phipps CopyingMessages 54.63 MB (57,281,147 b... 25 Judith Rodrigues LoadingMessages 57.11 MB (59,880,427 b... 20 Olive Weeks LoadingMessages 53.52 MB (56,123,602 b... 20 Sonia Smith Queued 54.26 MB (56,894,534 b... 0 Sunset Room Queued 36.35 MB (38,113,922 b... 0 TestMB BR Queued 59.37 MB (62,256,579 b... 0 Joanne Rigby Queued 84.95 MB (89,079,670 b... 0
When the move requests reach 95% completed they will display a status of AutoSuspended. The end user can continue to use their mailbox at this time, and you can complete the moves at the desired time.
First remove the autosuspend flag from the move requests, so that they will resume all the way to completion.
[PS] C:\>Get-MoveRequest -BatchName "Branch Office Batch 1" | Set-MoveRequest -SuspendWhenReadyToComplete:$false
Next, issue a Resume-MoveRequest command.
[PS] C:\>Get-MoveRequest -BatchName "Branch Office Batch 1" | Resume-MoveRequest
Monitor the move requests until completion.
[PS] C:\>Get-MoveRequest -BatchName "Branch Office Batch 1" | Get-MoveRequestStatistics DisplayName StatusDetail TotalMailboxSize TotalArchiveSize PercentComplete ----------- ------------ ---------------- ---------------- --------------- Wendy Fyson Completed 54.07 MB (56,698,964 b... 100 John Williams Completed 52.35 MB (54,889,436 b... 100 Alex Heyne Completed 90.71 MB (95,114,080 b... 957.7 KB (980,659 bytes) 100 Katherine Phipps Completed 54.63 MB (57,281,147 b... 100 Judith Rodrigues Completed 57.11 MB (59,880,427 b... 100 Olive Weeks Completed 53.52 MB (56,123,602 b... 100 Sonia Smith Completed 54.26 MB (56,894,534 b... 100 Sunset Room Completed 36.35 MB (38,113,922 b... 100 TestMB BR Completed 59.37 MB (62,256,579 b... 100 Joanne Rigby Completed 84.95 MB (89,079,670 b... 100
Moving Mailboxes using Migration Batches
In the previous example we looked at using move requests to move multiple mailboxes. The move requests were added to a “batch” for ease of management. This is basically the same approach that could be used in Exchange 2010 to manage move requests.
Exchange 2013 has a new approach to migration batches with a whole new set of PowerShell cmdlets to create and manage them. I prefer PowerShell, but if you’d rather use the EAC you’ll notice that the first example in this article demonstrates how to create a migration batch. All you would need to do is manually add multiple users or import a CSV file. Let’s take a look at those CSV file requirements, which apply for either the PowerShell or EAC method.
To use Exchange 2013 migration batches we first need to create a CSV file containing the details of the mailboxes to move. The only required attribute to be included in the CSV file is the email address of the mailbox.
[PS] C:\admin\migration>Get-Mailbox -Database MB-HO-01 | Select PrimarySMTPAddress | Export-CSV -NoTypeInformation headofficebatch1.csv
Open the CSV file and change the header to “EmailAddress”.
Next, create the migration batch with New-MigrationBatch.
[PS] C:\admin\migration>New-MigrationBatch -Name "Head Office Batch 1" -CSVData ([System.IO.File]::ReadAllBytes("c:\admin\migration\headofficebatch1.csv")) -Local Identity Status Type TotalCount -------- ------ ---- ---------- Head Office Batch 1 Created ExchangeLocalMove 141
I didn’t set a notification email for the migration batch, but it has used the email address of the account that I was logged in with to submit the move request.
[PS] C:\admin\migration>Get-MigrationBatch "Head Office Batch 1" | fl submittedbyuser,ownerid,notificationemails SubmittedByUser : E15Admin@exchangeserverpro.net OwnerId : exchangeserverpro.net/Users/E15Admin NotificationEmails : {E15Admin@exchangeserverpro.net}
We could add more email addresses for notification if we need to.
[PS] C:\admin\migration>Get-MigrationBatch "Head Office Batch 1" | Set-MigrationBatch -NotificationEmails e15admin@exchangeserverpro.net,administrator@exchangeserverpro.net [PS] C:\admin\migration>Get-MigrationBatch "Head Office Batch 1" | fl submittedbyuser,ownerid,notificationemails SubmittedByUser : E15Admin@exchangeserverpro.net OwnerId : exchangeserverpro.net/Users/E15Admin NotificationEmails : {E15Admin@exchangeserverpro.net, administrator@exchangeserverpro.net}
At this stage the migration batch hasn’t started. To start it use the Start-MigrationBatch cmdlet. Alternatively, use the -AutoStart parameter when creating the migration batch.
[PS] C:\admin\migration>Start-MigrationBatch "Head Office Batch 1"
To see the progress of the migration batch run Get-MigrationUser and Get-MigrationUserStatistics.
You can do this for a single user, such as Aisha Bhari that was moved in an earlier example in this article.
[PS] C:\admin\migration>Get-MigrationUser aisha.bhari@exchangeserverpro.net Identity Batch Status LastSyncTime -------- ----- ------ ------------ Aisha.Bhari@exchangeserverpro.net Move Aisha Bari Completed 8/07/2014 10:27:05 PM [PS] C:\admin\migration>Get-MigrationUser aisha.bhari@exchangeserverpro.net | Get-MigrationUserStatistics Identity Batch Status Items Synced Item s Sk ippe d -------- ----- ------ ------------ ---- Aisha.Bhari@exchangeserverpro.net Move Aisha Bari Completed 7090 0
Or do it for all users being migrated.
[PS] C:\admin\migration>Get-MigrationUser | Get-MigrationUserStatistics Identity Batch Status Items Synced Item s Sk ippe d -------- ----- ------ ------------ ---- Aisha.Bhari@exchangeserverpro.net Move Aisha Bari Completed 7090 0 bob.winder@exchangeserverpro.net Head Office Batch 1 Queued 0 0 DiscoverySearchMailbox{D919BA05-46A6-... Head Office Batch 1 Queued 0 0 extest_0bcca07661e94@exchangeserverpr... Head Office Batch 1 Queued 0 0 Famida.Ghtoray@exchangeserverpro.net Head Office Batch 1 Syncing 0 0 Ferzana.King@exchangeserverpro.net Head Office Batch 1 Syncing 0 0 Frank.Warboys@exchangeserverpro.net Head Office Batch 1 Syncing 0 0 Garth.Gibbons@exchangeserverpro.net Head Office Batch 1 Syncing 0 0 Gary.Hopkins@exchangeserverpro.net Head Office Batch 1 Syncing 0 0 Gavin.Welch@exchangeserverpro.net Head Office Batch 1 Syncing 0 0
When you’re ready to complete the migration batch, which will cause short outages for each user, use Complete-MigrationBatch. Alternatively, use the -AutoComplete switch when creating the migration batch and it will automatically occur, which may disrupt your end users at an undesirable time.
[PS] C:\admin\migration>Complete-MigrationBatch "Head Office Batch 1"
Summary
As you can see there are multiple ways to manage mailbox moves in Exchange Server 2013. Move requests will already be familiar to those who have run mailbox migrations on Exchange 2010 before, whereas the new Exchange 2013 migration batches offer some improved features such as notification emails.
This article Moving Exchange Server 2013 Mailboxes is © 2014 ExchangeServerPro.com
Get more Exchange Server tips at ExchangeServerPro.com