Typically in the upgrade scenario moving mailboxes will be done from Exchange 2007/2003 mailbox databases (Source) to Exchange 2010 mailbox databases (Target).

When moving mailboxes from Microsoft Exchange Server 2007 Service Pack 2 (SP2) to Exchange Server 2010, the following should be considered:

· The move process is performed online, and end-users will be able to access their mailboxes during the move.

· Mailboxes cannot be moved from Exchange 2007 SP1 or earlier, the source Mailbox server must be running Exchange 2007 SP2 or later.

· Perform the move from a server running Exchange 2010 by using the Exchange Management Console or the move request cmdlet in the Exchange Management Shell, however Move-Mailbox cmdlet in Exchange 2007 cannot be used to move mailboxes to Exchange 2010 servers.

Move Mailboxes using Exchange Management Console

1. In the consoled tree, navigate to Recipient Configuration > Mailbox.

2. In the result pane, select one or more mailboxes that planned to be moved.

3. In the action pane, click New Local Move Request.

4. On the Introduction page, configure the following settings:

· A new move request will be placed for the following mailboxes this box displays the mailboxes that was selected in the result pane, if you want to add or remove mailboxes, click Cancel, and then make the changes in the result pane.

· Target mailbox database click Browse to open the Select Mailbox Database dialog box. Use this dialog box to select the target mailbox database to which you want to move the mailboxes. Click OK to return to the wizard.

5. On the Move Options page, specify how you want to manage corrupted messages if they are found.

· Skip the mailbox Click this button to specify that mailboxes containing corrupted messages will not be moved.

· Skip the corrupted messages Click this button to move the mailbox, but not to move any corrupted messages, if you select this option you’ll need to set the Maximum number of messages to skip.

· Maximum number of messages to skip Use this list to specify a number between -1 and 2,147,483,647, use -1 to skip an unlimited number of corrupted messages.

6. On the New Local Move Request page, review you configuration settings. Click New to create the move request. Click Back to make changes.

7. On the Completion page, review the following, and then click Finish to close the wizard:

· A status of Completed indicates that the wizard completed the task successfully.

· A status of Failed indicates that task wasn’t completed, if the task fails, review the summary for an explanation, and then click Back to make any configuration changes.

8. Click Finish to close the wizard.

Move Mailboxes using PowerShell or MoveMailbox.ps1 script

In this section we will cover Moving Mailboxes using PowerShell cmdlet and using MoveMailbox.psa1 script.

· Test Whether a mailbox is ready for move:

This example uses the WhatIf switch to test whether Tony Smith’s mailbox is ready to move to the new database DB01 and if there are any error within the command, when use WhatIf switch the system performs checks on the mailbox, and if the mailbox isn’t ready to move, the error will be generated:

New-MoveRequest -Identity 'tony@Contoso.com -TargetDatabase DB01 -WhatIf

· Create a local move request:

This example moves Tony Smith’s mailbox to the new database DB01:

New-MoveRequest -Identity 'tony@alpineskihouse.com' -TargetDatabase DB01

· Create a batch move request:

This example create a batch move request for all mailboxes on the database DB01 and moves to the database DB02 with the BatchName parameter valude DB01ToDB02

Get-Mailbox -Database DB01 | New-MoveRequest -TargetDatabase DB02 -BatchName "DB01toDB02"

· Create a move request that suspends before completion:

This example creates a move request that is suspended after all the initial content is moved, but before the mailbox is locked down and switched over to the new location:

New-MoveRequest -Identity 'tony@alpineskihouse.com' -TargetDatabase DB01 -SuspendWhenReadyToComplete

· Create a move request that is processed by a specific server:

This example creates a move request that is processed by the specific Client Access server CAS1.contoso.com, which has the Microsoft Exchange Mailbox Replication service installed:

New-MoveRequest -Identity 'tony@alpineskihouse.com' -TargetDatabase DB01 -MRSServer CAS1.Contoso.com

· Create a suspend move request:

This example creates a batch move request that is suspended for all mailboxes on database DB01, you may want to run this command if want to create the move request now and then resume it in the evening, when e-mail traffic is low:

Get-Mailbox -Database DB01 | New-MoveRequest -TargetDatabase DB02 -BatchName "26August"

· Move Mailboxes by using the MoveMailbox.ps1 Script in the Shell:

Similar to the Move-Mailbox cmdlet in Microsoft Exchange 2007, the MoveMailbox.ps1 script provides a synchronous management experience for moving mailboxes, by default scripts are installed at “C:\Program Files\Microsoft\Exchange Server\V14\Scripts”,

MoveMailbox.ps1 performs the following tasks:

a. Creates a local move request.

b. Waits for the mailbox move to complete.

c. Clears the move request after it completes.

MoveMailbox.ps1 include two parameter sets, the 1st parameter set moves a single mailbox, or you can pipeline mailboxes into the command, the 2nd parameter set moves all mailboxes hosted on a specific database, or you can pipeline database objects into the command to move all mailboxes that reside on those mailbox databases, these are different example that we can follow while using MailboxMove.ps1 to move batch of mailboxes as the following:

· Example 1:

In this example moves the mailboxes that begin with “ay”, if these mailboxes reside on the mailbox database DB1, this example uses the DatabaseMap parameter to move them to mailbox database DBA, if these mailboxes reside on DB2, the example moves them to mailbox database DBB:

Get-Mailbox ay* | .\MoveMailbox.ps1 –DatabaseMap @{“DB1”=”DBA”;”DB2”=”DBB”}

· Example 2:

This example moves Tony Smith’s mailbox to DB2:

.\MoveMailbox.ps1 -Identity "Tony@Contoso.com" -TargetDatabase "DB2"

· Example 3:

This example moves all mailboxes that reside on mailbox database DB1 to database DB2:

.\MoveMailbox.ps1 -MailboxDatabase DB1 -TargetDatabase DB2

· Example 4:

This example uses the Get-MailboxDatabase cmdlet to retrieve all mailbox database objects whose mailbox database begins with “DB1”, and then pipeline the result to the MoveMailbox.ps1 script:

Get-MailboxDatabase DB1* | .\MoveMailbox.ps1 -DatabaseMap @{"DB10"=DBA;"DB11"="DBB";"DB12"="DBA"}