This article is an excerpt from the Exchange Server 2003 to 2010 Migration Guide.
Mailbox moves in previous versions of Exchange were interactive in nature, in that a wizard, script or shell command was used to move the mailbox and it occured in real time.
In Exchange Server 2010 mailbox moves are now handled using move requests. In short, the move request is submitted into a queue and processed by the Mailbox Replication Service (MRS), which runs on Client Access servers.
Exchange 2010 mailbox move requests can be created using either the Exchange Management Console or the Exchange Management Shell.
- Creating Move Requests using the Exchange Management Console
- Using Filters to Choose Mailboxes for Move Requests
- Creating Move Requests using the Exchange Management Shell
There are only a few minor differences between the console and shell for performing mailbox moves, for the most part it comes down to which one you are most comfortable with.
Creating Move Requests using the Exchange Management Console
Launch the Exchange Management Console and navigate to Recipient Configuration/Mailbox.
Select a mailbox, or hold the CTRL key to select multiple mailboxes to move as a group.
In the Actions pane click on New Local Move Request. Local Move Requests are for moves within the same Exchange organization.
All of the mailboxes selected for the New Local Move Request wizard will be moved to the same target mailbox database. Click the Browse button to choose a target mailbox database.
Select the mailbox database to move the pilot group to and then click OK. Click Next to continue.
Leave the Move Settings as the default settings and click Next to continue. If you encounter issues with corrupt items you may need to create a new move request for those mailboxes and choose to skip corrupted messages.
Review the list of mailboxes that will be moved and then click New to create the move requests.
Click Finish to close the wizard.
The move requests are created and will be processed by the Exchange server. You can view the status of the move requests in the Exchange Management Console under Recipient Configuration/Move Request.
Right-click a move request and choose Properties to see the status of that move request.
Using Filters to Choose Mailboxes for Move Requests
When performing mailbox migrations you can use filters to make the task of selecting mailboxes to be moved simpler.
Open the Exchange Management Console and navigate to Recipient Configuration/Mailbox. Click on Create Filter at the top of the console.
Filters can be created for a number of different user attributes, such as department, the current server they are on, or by name.
For example, if you are batching mailbox migrations by surname you can create a filter to only show mailbox users whose surname starts with a given letter.
Click on Apply Filter to see the resulting view.
Filtering the views in this way can make it very easy to select the mailboxes that you wish to create move requests for.
Creating Mailbox Move Requests with the Exchange Management Shell
In a similar way to the Exchange Management Console the Exchange Management Shell allows filtering of mailboxes in the organization by various criteria.
For example to get the same filtered list of mailbox users with surnames starting with the letter A the following command is used:
[PS] C:\>Get-Recipient | Where {$_.LastName -like "A*"} Name RecipientType ---- ------------- Amanda.Agrawal UserMailbox David.Abbott UserMailbox Debbie.Abdillahi UserMailbox Debbie.Amissah UserMailbox Debbie.Ashong UserMailbox Debbie.Askew UserMailbox Denise.Ahadi UserMailbox Donna.A'Bear UserMailbox Ella.Amaral UserMailbox Janis.Armoogum UserMailbox Jo.Allingham UserMailbox Kathy.Abdullahi UserMailbox Lesley.Ahmad UserMailbox Sue.Andress UserMailbox Valerie.Andrews UserMailbox
This output can then be piped into the New-MoveRequest command to create the move requests.
Get-Recipient | Where {$_.LastName -like "A*"} | New-MoveRequest -TargetDatabase MB-HO-01
In the above example the mailbox users whose surnames starting with the letter A have new move requests created to migrate them to the database MB-HO-01.
If the same command was used but without the –TargetDatabase parameter, the mailboxes being moved would be automatically distributed across the available databases within the same Active Directory site as the server that the command is being executed from. The exception to this is any mailbox databases that have been excluded from automatic mailbox provisioning.
As another example, this command when run on ESP-HO-EX2010B will create move requests for all mailbox users on the legacy server ESP-HO-EX2003 and automatically distribute the mailboxes across the Exchange 2010 mailbox databases in the site where ESP-HO-EX2010B is located.
Get-Recipient | where {$_.ServerName -eq "esp-ho-ex2003"} | New-MoveRequest
Automatic distribution of mailboxes across available databases is only possible when using the Exchange Management Shell to initiate the move requests. Using the Exchange Management Console requires you to specify a target database for the mailboxes being moved.
The Exchange Management Shell can also be used to monitor the progress of move requests. For example this command will list all move requests that have a target database of MB-HO-01.
[PS] C:\>Get-MoveRequest | where {$_.targetdatabase -eq "MB-HO-01"} | Get-MoveRequestStatistics DisplayName Status TotalMailboxSize TotalArchiveSize PercentComplete ----------- ------ ---------------- ---------------- --------------- Joanna Hughes Queued 204 MB (213,900,039 by... 0 Joy Singh Queued 201.6 MB (211,394,039 ... 0 Laoise Curtis Queued 203.4 MB (213,259,972 ... 0 Maggie Hengist Queued 201.5 MB (211,268,161 ... 0 Lydia Haines Queued 202.9 MB (212,717,146 ... 0 Michael Phillips Queued 204.5 MB (214,421,891 ... 0 Nancy Scott Queued 200.7 MB (210,499,528 ... 0 Ravi Edmonds Queued 201.6 MB (211,396,972 ... 0 Pakwei Dean Queued 201.9 MB (211,688,603 ... 0 Rowena Khan Queued 203.9 MB (213,824,471 ... 0 Prathee Dar Queued 201.9 MB (211,671,241 ... 0 Sharmila Hafri Queued 203.1 MB (213,003,913 ... 0 Stuart Beauchamp Queued 206.8 MB (216,879,621 ... 0 Wendy Fyson Queued 202.3 MB (212,077,416 ... 0 Tina Miller Queued 203.2 MB (213,039,339 ... 0 Jas Dowden InProgress 201.2 MB (210,950,587 ... 79 Jagir Ward InProgress 201.1 MB (210,838,575 ... 79 Aisha Bhari Completed 0 B (0 bytes) 100 Andrew O'Grady Completed 204.2 MB (214,083,224 ... 100 Denise Dartnell Completed 204.8 MB (214,717,706 ... 100 Garth Gibbons Completed 203.4 MB (213,254,283 ... 100 Harinder Rahman Completed 203.8 MB (213,746,554 ... 100
Hope this isn’t too old
I did a local move of all the mail accounts to a new mail store
But when I Dismount the old mail store I can connect to exchange & send emails but not recieve
how do I default the new mail store
Hi Paul,
Great article. I have the following question, will archive mailboxes be transferred as well during move request? We have some mailboxes with archives and I’m wondering if there is something else to do in order to move those.
Thanks
Paul,
Thanks for the tips, my question is this, I want to move all the mailboxes from one database to another using powershell, can you give some ideas how I can do this?
Thanks,
Craig
The Real Person!
The Real Person!
What have you already tried, and what problem are you running into?
Paul,
I have just used the Management Console to move mailboxes, but I wanted to know if using the following is okay to use to move bulk mailboxes from one db to another:
Get-Recipient | where {$_.ServerName -eq “Mailbox DBSample1”} | New-MoveRequest -TargetDatabase DBSample2 (Local move request)
Hi Paul Just to confirm can the mailboxes be moved whilst the database is in a DAG? or does the DAG copy need to be reseeded from scratch once moved
The Real Person!
The Real Person!
Database copies do not need to be reseeded for mailbox moves.
Good day Everyone,
I am having a problem moving mailboxes in exchange 2010 from from one dc to another DC. i have enabled inheritance and granted access “exchange servers” to the users OU but still having a problem. here is the problem
Error:
Active Directory operation failed on dc. This error is not retriable. Additional information: Insufficient access rights to perform the operation.
Active directory response: 00002098: SecErr: DSID-03150E49, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0
Hi!
In Outlook Exchange Status, it is showing HTTPS running in Background. is it correct? My Boss suggests, it should be run in TCP/IP
Hi!
How to move 10 to 20 mailboxes from exchange 2003 to exchange 2010 using Exchange Powershell?
In our Exchange 2010 environment we are always getting alerted on databases running low on space. We normally find one or two small mailboxes and manually move them to another db that has plenty of space until we can request more storage to grow our db that is running low on space.
we always use the move request from the Mgmt console. Of course we need to look for the db that has the most space to move the mailboxes to it.
I have two questions/requests if you could help.
1- What would be the command to move a specific mailbox to whichever database has the largest free space. (without specifying the database. In other words. moving a mailbox and letting exchange figure out which db has the largest free space to move the mailbox there)
2- on this command you used above: ( Get-Recipient | where {$_.ServerName -eq “esp-ho-ex2003”} | New-MoveRequest) – how does exchange determines to which database to move the mailbox?
Thank you for your help.
It means that they can’t recieve email. For example: If I send an email to Laura, she does not recieve it and I get an Undeliverable Error Message:
This is an automatically generated Delivery Status Notification.
Delivery to the following recipients failed.
laura.davis@sykes.com
I explained the events that lead to this: I completed a local move request. The status shows “Completed with Warning”. When I click on the Properties, it shows that my Source Database is DB02 (where they were moved from) and the Target Database as DB01 (which is correct). Under the Suspend comments under Details, I see this message:
Warning: Failed to clean up the source mailbox after the move.
Error details: MapiExceptionUnexpectedMailboxState: Unable to delete mailbox. (hr=0x80004005, ec=2634)
I am new to using EMC 2010 so I haven’t performed any troubleshooting steps. I thought about just removing the Exchange Attributes in Active Directory and just start over.
The Real Person!
The Real Person!
There should be more info in the NDR. It might be relevant. Can you post the full NDR? You can obfuscate sensitive info if you need to.
Hi Paul,
I was able to resolve the issue. It was my mistake. I added the users UPN information in Active Directory as well as the EMC resulting in duplicates. As soon as I removed the UPN information from the EMC it did the trick and the users were able to send and recieve.
Thanks for trying to help though, I appreciate it 🙂
After performing a New Local Move Request, I got a CompletedWithWarning message. I noticed that the Source Database is showing: DB02 (which is where they were moved from) and Target Database: DB01. The logs are showing that the primary mailbox could not be deleted and has tried 6 of 6 times. The user is not able to recieve email now. Any suggestions on a fix for this?
The Real Person!
The Real Person!
You’ll need to be more specific about what “not able to receive email now” means. What has your troubleshooting shown so far?
Great article Paul!
We are in the middle of planning a migration of an SBS 2011 over to Server 2012 R2 with Exchange 2013 installed. Can we use the Exchange 2010 Management Console to create move requests to the new Exchange 2013? Any tips of the trade would be appreciated.
Thanks
The Real Person!
The Real Person!
Move requests need to be created on the higher version of Exchange (in your case 2013).
Thanks Paul for your quick comeback… this article then https://www.practical365.com/moving-exchange-server-2013-mailboxes/ ?
… or this one: https://www.practical365.com/exchange-server-2010-2013-migration-migrating-mailboxes/ ?
The Real Person!
The Real Person!
Yes that article demonstrates Exchange 2013 mailbox moves.
Paul;
We have a mail database that has gotten far too large. I’m working on splitting this out into 3 databases in order to keep database size down around that magic 200gb mark. The move mailbox process is very easy, but my original mailbox database isn’t shrinking? I’ve moved just a few mailboxes, around 10gb and waited overnight for database cleanup to run. The old database is exactly the same size as before the moves.
Am I missing something? How does one reclaim the space in the database after a move?
Hi Paul
Thanks for your helpful articles – I have a query though. After several successful move requests I have noticed an issue. I have moved 40 mailboxes away from a database that is to be removed in due course – let’s call it OLDDB and when I look in the EMC at a filtered view to show only the mailboxes in OLDDB it all looks as it should with the 40 no longer appearing. But – and here is my problem – when I run a powershell command Get-MailboxDatabase OLDDB | Get-Mailbox to show me a list of all the mailboxes remaining there it still shows 40 that have been moved. Why would that be? Is there a clean-up or other attribute that needs fixed?
Thanks Debi
What is best way to move MailBox DataBase from Exchange server 2010 to another Exchange server 2010,
Note:
-Each of server in different country.
-MailBoxes users around 3000.
-If there is stypes for this case please tell me.
The Real Person!
The Real Person!
Just do mailbox moves.
-In different country? How if DataBase size if we say 60 GB or more?
-From Exchange server 2010 to another (((NEW)))) Exchange server 2010
The Real Person!
The Real Person!
Yes, the way to move mailboxes between two Exchange 2010 servers that are in the same organization, no matter where they are in the world, is to do mailbox moves as demonstrated in the article above.
If there’s a lot of mailboxes or they are very big then it will simply take longer.
Pingback: Exchange Server 2010 Mailboxes and the ServerName Attribute
I have 2 exchange mailbox servers that were in a DAG but not any more. I have 3 individual mailboxes that live on 1 of the servers and the rest of the 100+ live on the other. How can I move the 3 boxes to the server with the rest of the boxes?
Thank you!
The Real Person!
The Real Person!
You can move them using the same process demonstrated in this article.
Summary: 1 item(s). 0 succeeded, 1 failed.
Elapsed time: 00:00:01
lchapparo
Failed
Error:
Mailbox ‘corp.xxxxxxxxx.com/Users/xxxxxxx’ is already in the target database ‘BOH-MAIL’.
Click here for help… http://technet.microsoft.com/en-US/library/ms.exch.err.default(EXCHG.140).aspx?v=14.3.181.6&t=exchgf1&e=ms.exch.err.Ex898995
Exchange Management Shell command attempted:
‘corp.xxxxxxxxx.com/Users/xxxxxxx’ | New-MoveRequest -TargetDatabase ‘BOH-MAIL’
Elapsed Time: 00:00:01
they are still in the same database even though they resides on different mailbox servers. it won’t let me move the boxes.
The Real Person!
The Real Person!
Mailbox databases have unique names in Exchange 2010. You would need to move them to a database that exists on the server where you want them to be located.
ok let me clarify….
there is only one database – BOH-MAIL
it is mounted & healthy on a server called Mail2 that at one point was part of a 2 server DAG with the other server called Mail1
Both servers are still online just not in a DAG anymore
When I run GetMailbox -Database “BOH-MAIL”, I see 3 mailboxes that show Mail1 under the server name field. I don’t see how that is possible. I am trying to figure out if that is accurate and if so, how can I move them to Mail2.
The Real Person!
The Real Person!
That server attribute for mailboxes is misleading when DAGs are used.
If the database attribute says they are on BOH-MAIL, and you’ve only got one BOH-MAIL databases (which you must, since it is impossible to have two of the same name) then they are on that database.
More here:
https://www.practical365.com/exchange-server-2010-mailboxes-servername-attribute/
This is an awesome resource. Better presented than Microsoft’s either too scanty or convoluted kb articles
Thanks for guide!
When I do “New Local Move Request” from EMC. Client needs to restart Outlook to get access.
From logfile.
Couldn’t preserve the mailbox signature for mailbox ‘Primary (f62686b3-7494-466c-8c8f-51430a1362e3)’. Outlook clients will need to restart to access the moved mailbox.
Is there any better way to do this? I need to move a lot of mailboxes without down time.
Very good information BUT what I want is the ability to set a schedule for non business hours. All this good info about setting a move and completing it immediately. WhatI need is the ability to schedule a move for ’10:00 pm tonight” In EX2003 the gui gave you the option to set a schedule for ‘whenever’ EX2010 does not have that in the GUI. How would you do it in Powershell.
The Real Person!
The Real Person!
Not exactly a schedule, but you can start the online mailbox moves any time of day and add the -SuspendWhenReadytoComplete parameter. This moves them to 95% then puts the move requests in a suspended state.
At the time you want the migration to finish you just:
Set-MoveRequest -SuspendWhenReadyToComplete:$false
Then…
Resume-MoveRequest
(note: for both those examples you’d probably want to pipe in a list of move requests from Get-MoveRequest so only the ones you want to resume get resumed)
Hi Paul,
I have an ongoing migration. It is taking more than expecting, so I want to set the -SuspendWhenReadyToComplete. If I run the command now:
Get-MoveRequest -MoveStatus InProgress | Set-MoveRequest -SuspendWhenReadyToComplete:$True
I run into an error: “SuspendWhenReadyToComplete and PreventCompletion flags cannot be specified on auto-resume jobs.”
Should I manually suspend the migration, set the flag, and resume ?
Thanks!
A.
Were you able to resolve this issue? We are also getting this for migrations to Exchange 2013. We tried suspending, setting the flag & resuming but get the same error.
Any feedback would be appreciated!!
Quick question for you. I move a ton of mailboxes as part of my routine for white space remediation. during these moves many of my mailboxes complete with warnings usually “failed to cleanup source mailbox” which is no big deal I remove the soft deleted once I confirm the mailboxes are moved and accessible. however every now and then some fail to to unreachable sub domain controller. I have been trying to write a powershell script that will allow me to filter these failures out and list them. The issue I run into is that the moverequeststatistics message property appears to be more than just text so the normal comparison tags like -like -notlike etc. do not work it seems to be some embedded object I even tried to take a layer deeper and compare the message.formatparameters but that also appears to be an object. is there a way for me to generate a list of moverequests that hav a status of “completedwithwarnings” based on a prticular warning message? I tried to query teh suspended comment property but I can’t find it accessible anywhere I’m guessing that’s just a label for the message property of the moverequest statistics
Helo Paul,
A question… After that finish of move Mailboxes succesfully… I ran on Exchange Server a Get-MailboxDatabase to verify the change on both databases and the users are in both data bases. But in the exchange console on properties of the users the data base is OK…¿Why? Thanks!
We’ve just moved quite a few users from Exchange 2010 to Exchange 2010 (new hardware)
The migration has gone well so far but the users still show the old exchange server name in both the account and under mail connection in outlook (under connection status) though under both directory listing the new server is shown.
If the moves are queued, how do we get those to continue?
The Real Person!
The Real Person!
Exchange throttles the moves to prevent the server from being overwhelmed. The queued ones will start in due course.
Does it affect the exchange enterprise vault?
Hi paul…can i ask you an exchange server 2010 question ?
Thx
Do you know of a way modify the filter: Get-Recipient | Where {$_.LastName -like “A*”} to capture any last name in the range A through M? without having to have a 13 separate -like statements? Is there a “A-M” syntax?
The Real Person!
The Real Person!
Here is a way you can do it. First, create an array of the letters you want to include.
$letters = @(65..77 | ForEach-Object { $([char]$_) })
Then, run this command to loop through the array.
foreach ($letter in $letters) { Get-Recipient | Where {$_.LastName -like “$letter*”}}
Pingback: Local Move Request Fails: No Available Mailbox Replication Service
Pingback: How to Move Exchange Mailboxes in a Text File using PowerShell - Exchange Server Pro
Pingback: Tweets that mention How to Move Mailboxes in Exchange Server 2010 - Exchange Server Pro -- Topsy.com