How to Move Exchange Mailboxes with PowerShell

choubertsprojects

The Best WordPress plugins!

1. WP Reset

2. WP 301 Redirects

3. WP Force SSL

Exchange mailboxes are used for storing emails and other items so it’s important to move them using PowerShell. We’ll walk through the process of moving one mailbox with a few screenshots provided by Exchange.

The “move mailbox to another database exchange 2016 powershell” is a PowerShell command that can be used to move Exchange Mailboxes with the “New-MoveRequest” cmdlet. The command will take care of all the necessary steps for you.

How to Move Exchange Mailboxes with PowerShell

Microsoft Exchange administrators often have to move mailboxes. You may transfer mailboxes in a variety of methods, but the New-MoveRequest cmdlet in PowerShell can help you out.

You may relocate user, archive, arbitration, discovery, and other sorts of mailboxes using a Local Move Request. In this video, you’ll learn how to use Windows Powershell to initiate and handle local move requests!

Prerequisites

If you want to follow along with all of the examples in this tutorial, make sure you have the following items before you start:

  • Exchange 2013/2016 or 2019 operating on-premises in an Active Directory environment
  • Requests for local moves should be made within the same Active Directory forest.
  • Logged in as a domain user with the Mailbox Move and Migration Privilege permission on a domain-joined machine
  • On a mailbox server, the Exchange Mailbox Replication Server (MRS) and Exchange Mailbox Replication Proxy services are running.
  • A mailbox that is both a source and a destination – This tutorial will relocate a mailbox from Ex01-DB’s source mailbox database to Ex02-DB’s destination mailbox database.
  • A mailbox may be moved – the Administrator user mailbox will be moved in this lesson.
  • If you’ve already signed into the server, you may use Exchange Management Shell to connect to it, or you can utilize Powershell Remoting to connect to it from any workstation.

Related: Using Remote PowerShell to Connect to an Exchange Server

Getting Ready for a User Mailbox Transfer

You must first verify that moving the mailbox to a different database is doable. There are a variety of instances in which you will know the maneuver will fail ahead of time, including:

  • Mounted and Healthy is the destination database.
  • The Database Limits Policy does not apply to the User Mailbox.
  • Because moving a mailbox creates a large number of transaction logs, be sure the disk holding the EDB and the Transaction log has adequate free space.
  • The mailbox takes up too much space in the destination database.

With a PowerShell console open and Exchange authenticated:

  1. As illustrated below, use the Get-MailboxStatistics cmdlet with the source mailbox as the parameter. You must first determine which database the source mailbox is stored in.

Select-Object -Property Database,Displayname | Get-MailboxStatistics Administrator

The EX01-DB database contains the Administrator mailbox.The EX01-DB database contains the Administrator mailbox.

2. If the mailbox database is DAG enabled, use the Get-MailboxDatabaseCopyStatus cmdlet to examine the database’s state. This cmdlet will show you the status of each database in your business, among other things.

Run the following command to check whether DAG is setup. Get-DatabaseAvailabilityGroup

The source database of EX01-DB, as well as the destination database of EX02-DB, are both healthy, as shown below.

Get-MailboxDatabaseCopyStatus | select name,Status from Get-MailboxDatabaseCopyStatus

It may also be mounted if it is a healthy database. It may also be mounted if it is a healthy database.

The database is in a healthy state, however it is not receiving client protocol connection requests. The database is healthy, mounted, and allowing client requests when it has a Mounted status.

If DAG isn’t available, another command can be used instead.

Format-Table Name, Server, Mounted | Get-MailboxDatabase -Status

The command will list all of the databases that are accessible, along with their current condition.

3. You’ve verified that both the source and destination database servers are up and running. Finally, make sure the mailbox has adequate space in the destination database.

Making a Request for a User Mailbox to be Moved Locally

Once you’ve determined that a move is feasible, use the New-MoveRequest cmdlet to generate a local move request. The Identity argument is required for the New-MoveRequest cmdlet; the other options are optional and will provide you more control over where the mailbox is moved to.

The New-MoveRequest cmdlet allows you to move:

  • Only the primary inbox is available.
  • Only the Archive Mailbox is accessible.
  • Both the Primary and Archive Mailboxes are available.

The User’s Primary and Archive Mailboxes Have Been Moved

A single line is all it takes to make a local move request. Run the following command to migrate the tutorial’s source mailbox from the source to the destination database:

The following example switches the administrator’s main mailbox to the EX02-DB database, as well as the archive mailbox. The batch will also be given the name “AdminMailbox.” BatchName: A batch’s name. When used with Get-MoveRequest, this may be used to filter the results.

-Identity administrator -TargetDatabase ex02-db -ArchiveTargetDatabase ex02-db -BatchName “AdminMailbox” New-MoveRequest -Identity administrator -TargetDatabase ex02-db -ArchiveTargetDatabase ex02-db -BatchName “AdminMailbox”

Using PowerShell to create a fresh move requestUsing PowerShell to create a fresh move request

If there are many users that need to be relocated, input the username and then pipe it to New-MoveRequest, such as “User1′′,”User2” | New-MoveRequest -TargetDatabase Ex01-DB. Because the Identity will be passed via the pipeline, there is no need to specify the -Identity argument.

Only move the user’s primary mailbox

You don’t have to transfer the user’s archive mailbox if you don’t want to. Instead, as illustrated below, use the-PrimaryOnly argument without the -ArchiveTargetDatabase parameter.

-Identity administrator -TargetDatabase ex02-db -PrimaryOnly -BatchName “AdminMailbox” New-MoveRequest -Identity administrator -TargetDatabase ex02-db -PrimaryOnly -BatchName “AdminMailbox”

The -ArchiveOnly argument may likewise be used to just relocate the archive database.

Mailboxes for Arbitration and Discovery Search are being relocated.

The majority of the mailboxes you’ll be relocating are user mailboxes. However, Exchange Server offers another sort of mailbox called service mailboxes that you’ll need to relocate on sometimes. Service mailboxes are used for internal functions and are not allocated to specific users.

Mailboxes for Arbitration

One of the most common service mailboxes is the Arbitration mailbox. Mailboxes for Arbitration are are used to store information about Exchange organization federation, information about the Exchange migration service, e-discovery, and more.

You can find a list of all Mailboxes for Arbitration using the Get-Mailbox cmdlet using the -Arbitration parameter.

Moving Mailboxes for Arbitration are similar to moving user mailboxes with just a minor difference.

Start by finding all of the Mailboxes for Arbitration in a mailbox database. The example below is finding all Mailboxes for Arbitration in the EX01-DB database limiting the output down to just the Name.

Get-MailboxDatabase -Identity ex01-db | get-mailbox -arbitration | ft -AutoSize Name Get-MailboxDatabase -Identity ex01-db | get-mailbox -arbitration

Getting a list of Mailboxes for ArbitrationGetting a list of Mailboxes for Arbitration

Now that you can see all of the Mailboxes for Arbitration in a database, move them with New-MoveRequest using the same parameters as with a user mailbox.

The command below is moving all Mailboxes for Arbitration inside of the EX01-DB database to the EX02-DB database.

Get-MailboxDatabase -Identity ex01-db | get-mailbox -arbitration | New-MoveRequest -TargetDatabase Ex02-DB -BatchName “All Mailboxes for Arbitration”

If everything works properly, you should be able to observe a successful execution like the one below.

The Status of the Request for a Move The Status of the Request for a Move

Because these mailboxes are generally small, relocating them will not take long.

You can view the progress with the Get-MoveRequest cmdlet, just as you do with user mailboxes.

Status of a Move RequestStatus of a Move Request

Mailboxes for Discovery

Much like Mailboxes for Arbitration, you can move Mailboxes for Discovery in the same manner but with one minor change to discover Mailboxes for Discovery.

To find Mailboxes for Discovery, you must filter the output of Get-Mailbox and return only mailboxes with a RecipientTypeDetails property value of DiscoveryMailbox as shown below.

$DiscoveryMailboxes = Get-MailboxDatabase Ex01-db | Get-Mailbox | where

Microsoft Exchange administrators often have to move mailboxes. You may transfer mailboxes in a variety of methods, but the New-MoveRequest cmdlet in PowerShell can help you out.

You may relocate user, archive, arbitration, discovery, and other sorts of mailboxes using a Local Move Request. In this video, you’ll learn how to use Windows Powershell to initiate and handle local move requests!

Prerequisites

If you want to follow along with all of the examples in this tutorial, make sure you have the following items before you start:

  • Exchange 2013/2016 or 2019 operating on-premises in an Active Directory environment
  • Requests for local moves should be made within the same Active Directory forest.
  • Logged in as a domain user with the Mailbox Move and Migration Privilege permission on a domain-joined machine
  • On a mailbox server, the Exchange Mailbox Replication Server (MRS) and Exchange Mailbox Replication Proxy services are running.
  • A mailbox that is both a source and a destination – This tutorial will relocate a mailbox from Ex01-DB’s source mailbox database to Ex02-DB’s destination mailbox database.
  • A mailbox may be moved – the Administrator user mailbox will be moved in this lesson.
  • If you’ve already signed into the server, you may use Exchange Management Shell to connect to it, or you can utilize Powershell Remoting to connect to it from any workstation.

Related: Using Remote PowerShell to Connect to an Exchange Server

Getting Ready for a User Mailbox Transfer

You must first verify that moving the mailbox to a different database is doable. There are a variety of instances in which you will know the maneuver will fail ahead of time, including:

  • Mounted and Healthy is the destination database.
  • The Database Limits Policy does not apply to the User Mailbox.
  • Because moving a mailbox creates a large number of transaction logs, be sure the disk holding the EDB and the Transaction log has adequate free space.
  • The mailbox takes up too much space in the destination database.

With a PowerShell console open and Exchange authenticated:

  1. As illustrated below, use the Get-MailboxStatistics cmdlet with the source mailbox as the parameter. You must first determine which database the source mailbox is stored in.

Select-Object -Property Database,Displayname | Get-MailboxStatistics Administrator

The EX01-DB database contains the Administrator mailbox.The EX01-DB database contains the Administrator mailbox.

2. If the mailbox database is DAG enabled, use the Get-MailboxDatabaseCopyStatus cmdlet to examine the database’s state. This cmdlet will show you the status of each database in your business, among other things.

Run the following command to check whether DAG is setup. Get-DatabaseAvailabilityGroup

The source database of EX01-DB, as well as the destination database of EX02-DB, are both healthy, as shown below.

Get-MailboxDatabaseCopyStatus | select name,Status from Get-MailboxDatabaseCopyStatus

It may also be mounted if it is a healthy database. It may also be mounted if it is a healthy database.

The database is in a healthy state, however it is not receiving client protocol connection requests. The database is healthy, mounted, and allowing client requests when it has a Mounted status.

If DAG isn’t available, another command can be used instead.

Format-Table Name, Server, Mounted | Get-MailboxDatabase -Status

The command will list all of the databases that are accessible, along with their current condition.

3. You’ve verified that both the source and destination database servers are up and running. Finally, make sure the mailbox has adequate space in the destination database.

Making a Request for a User Mailbox to be Moved Locally

Once you’ve determined that a move is feasible, use the New-MoveRequest cmdlet to generate a local move request. The Identity argument is required for the New-MoveRequest cmdlet; the other options are optional and will provide you more control over where the mailbox is moved to.

The New-MoveRequest cmdlet allows you to move:

  • Only the primary inbox is available.
  • Only the Archive Mailbox is accessible.
  • Both the Primary and Archive Mailboxes are available.

The User’s Primary and Archive Mailboxes Have Been Moved

A single line is all it takes to make a local move request. Run the following command to migrate the tutorial’s source mailbox from the source to the destination database:

The following example switches the administrator’s main mailbox to the EX02-DB database, as well as the archive mailbox. The batch will also be given the name “AdminMailbox.” BatchName: A batch’s name. When used with Get-MoveRequest, this may be used to filter the results.

-Identity administrator -TargetDatabase ex02-db -ArchiveTargetDatabase ex02-db -BatchName “AdminMailbox” New-MoveRequest -Identity administrator -TargetDatabase ex02-db -ArchiveTargetDatabase ex02-db -BatchName “AdminMailbox”

Using PowerShell to create a fresh move requestUsing PowerShell to create a fresh move request

If there are many users that need to be relocated, input the username and then pipe it to New-MoveRequest, such as “User1′′,”User2” | New-MoveRequest -TargetDatabase Ex01-DB. Because the Identity will be passed via the pipeline, there is no need to specify the -Identity argument.

Only move the user’s primary mailbox

You don’t have to transfer the user’s archive mailbox if you don’t want to. Instead, as illustrated below, use the-PrimaryOnly argument without the -ArchiveTargetDatabase parameter.

-Identity administrator -TargetDatabase ex02-db -PrimaryOnly -BatchName “AdminMailbox” New-MoveRequest -Identity administrator -TargetDatabase ex02-db -PrimaryOnly -BatchName “AdminMailbox”

The -ArchiveOnly argument may likewise be used to just relocate the archive database.

Mailboxes for Arbitration and Discovery Search are being relocated.

The majority of the mailboxes you’ll be relocating are user mailboxes. However, Exchange Server offers another sort of mailbox called service mailboxes that you’ll need to relocate on sometimes. Service mailboxes are used for internal functions and are not allocated to specific users.

Mailboxes for Arbitration

One of the most common service mailboxes is the Arbitration mailbox. Mailboxes for Arbitration are are used to store information about Exchange organization federation, information about the Exchange migration service, e-discovery, and more.

You can find a list of all Mailboxes for Arbitration using the Get-Mailbox cmdlet using the -Arbitration parameter.

Moving Mailboxes for Arbitration are similar to moving user mailboxes with just a minor difference.

Start by finding all of the Mailboxes for Arbitration in a mailbox database. The example below is finding all Mailboxes for Arbitration in the EX01-DB database limiting the output down to just the Name.

Get-MailboxDatabase -Identity ex01-db | get-mailbox -arbitration | ft -AutoSize Name Get-MailboxDatabase -Identity ex01-db | get-mailbox -arbitration

Getting a list of Mailboxes for ArbitrationGetting a list of Mailboxes for Arbitration

Now that you can see all of the Mailboxes for Arbitration in a database, move them with New-MoveRequest using the same parameters as with a user mailbox.

The command below is moving all Mailboxes for Arbitration inside of the EX01-DB database to the EX02-DB database.

Get-MailboxDatabase -Identity ex01-db | get-mailbox -arbitration | New-MoveRequest -TargetDatabase Ex02-DB -BatchName “All Mailboxes for Arbitration”

If everything works properly, you should be able to observe a successful execution like the one below.

The Status of the Request for a Move The Status of the Request for a Move

Because these mailboxes are generally small, relocating them will not take long.

You can view the progress with the Get-MoveRequest cmdlet, just as you do with user mailboxes.

Status of a Move RequestStatus of a Move Request

Mailboxes for Discovery

Much like Mailboxes for Arbitration, you can move Mailboxes for Discovery in the same manner but with one minor change to discover Mailboxes for Discovery.

To find Mailboxes for Discovery, you must filter the output of Get-Mailbox and return only mailboxes with a RecipientTypeDetails property value of DiscoveryMailbox as shown below.

$DiscoveryMailboxes = Get-MailboxDatabase Ex01-db | Get-Mailbox | where {$_.RecipientTypeDetails -like “DiscoveryMailbox”}

After you’ve gathered all of the discovery mailboxes in a database, you may create a new move request, same to how you would with an arbitration or user mailbox.

$DiscoveryMailbox | New-MoveRequest -TargetDatabase Ex02-db | $DiscoveryMailbox | $DiscoveryMailbox | $DiscoveryMailbox | $DiscoveryMailbox | $Discovery

DiscoverySearchMailbox is being moved.DiscoverySearchMailbox is being moved.

Get-MoveRequest keeps track of mailbox moves.

A request for a relocation does not happen right away. The Get-MoveRequest cmdlet may be used to check on the status of a move request. The Get-MoveRequest cmdlet returns a list of all active move requests.

The Get-MoveRequest command will provide a list of all current move requests, regardless of whether they were initiated using the web interface or PowerShell.

Get-MoveRequestGet-MoveRequest

The Exchange Management Console will not show a move request started from Powershell (Web Interface). The Get-MoveRequest command is the sole way to see these tasks.

Get-MoveRequest doesn’t tell you anything by default, as you can see in the picture above. It just shows the name of the mailbox, its present state, and the database to which it is being migrated. By passing the output to Select-Object or the Format-List cmdlet, you may inspect all of the properties it returns (fl alias).

Format-List | Get-MoveRequest

Other attributes, such as the source and destination, are now visible, however a % of the move’s progress would be helpful.

Get a list of all the properties for a relocation request.Get a list of all the properties for a relocation request.

Obtaining Statistics on Local Moves

The Get-MoveRequest cmdlet, as you can see, doesn’t provide a lot of information. To fix this, use Get-MoveRequestStatistics to stream the output of Get-MoveRequest. The Get-MoveRequestStatistics cmdlet offers a lot more information, such as the proportion of requests that have been completed.

Get-MoveRequestStatistics | Get-MoveRequest

Obtaining Statistics from Your MailboxObtaining Statistics from Your Mailbox

You may pipe the output of Get-MoveRequestStatistics to Select-Object or Format-List again, much as the result of Get-MoveRequest.

Format-List | Get-MoveRequestAdministrator | Get-MoveRequestStatistics

Because the Get-MoveRequestStatistics cmdlet produces a lot of helpful data, it’s critical that you know what many of the most relevant attributes signify.

  • Displayname: The target account’s display name.
  • PercentComplete: The proportion of the relocation that has been completed.
  • Completed, InProgress, and CreatingInitialSyncCheckpoint are all possible values for StatusDetail.
  • Suspend: The move request will be generated, but it will not be processed right away. It will be in the Suspend state, thus use Resume-MoveRequest -Identity administrator to resume the move request. The Suspend property will change to $false once you run this command, and the transfer request will begin.
  • SuspendWhenReadyToComplete: This option will sync up to 95% of the mailbox; however, the admin must finish the request using Resume-MoveRequest.
  • Number of malformed objects discovered during migration (BadItemsEncountered).
  • OverallDuration: The entire time it took to accomplish the migration.
  • TotalMailboxSize: The size of the mailbox in megabytes.
  • Message: Provides specific details regarding the relocation request. For example, if the -SuspendWhenReadyToComplete argument is set to $true in New-MoveRequest, the move process will halt at 95% and need the administrator to continue it. The following will be shown in the Message property: Informational: Because the SuspendWhenReadyToComplete option is set to $true, the move request for mailbox 60ba0d44-e046-4608-b162-6382bd9d070c is ready to finish and has been automatically suspended.

Continuation and Completion of a Move Request

The Restart-MoveRequestcommand is used to resume the move request. Unlike the New-MoveRequest, it doesn’t allow many arguments. Pipelining Resume-MoveRequest with Get-MoveRequest is the simplest method to utilize it. The Get-MoveRequest method retrieves the move request, whereas the Resume-MoveRequest method reads the move request and completes it.

Get-MoveRequest | Resume-MoveRequest | Get-MoveRequest | Get-MoveRequest | Get-MoveRequest

There will be no output from this command, But if Get-MoveRequestStatistics | Get-MoveRequest | fl is executed, you will notice that the Status is InProgress and the SyncStage is FinalIncrementalSync. Wait for a few minutes and run Get-MoveRequestStatistics | Get-MoveRequest ; you will notice that the progress is completed and the PercentComplete is 100.

After resuming a request for a relocation.After resuming a request for a relocation.

Requests for relocation are being put on hold.

When you submit a move request for a user’s main mailbox using New-MoveRequest, the mailbox owner may see the following message: “The Microsoft Exchange Administrator has made a modification that requires you to stop and restart Outlook.”

You could choose to relocate the user’s mailbox over the weekend to avoid any messages being shown to the mailbox owner. When the user returns to the workplace, they will be able to launch Outlook without any messages. This instance demonstrates why the -SuspendWhenReadyToComplete argument in New-MoveRequest could be useful.

Personally, I never use this command; instead, I notify the user of what I’m doing and what they may view.

Using the previous example, you may want to use the -SuspendWhenReadyToComplete argument, as shown below.

-Identity administrator -TargetDatabase ex01-db -ArchiveTargetDatabase ex01-db -BatchName “AdminMailbox” -SuspendWhenReadyToComplete New-MoveRequest -Identity administrator -TargetDatabase ex01-db -ArchiveTargetDatabase ex01-db -BatchName “AdminMailbox”

The Administrator account, as well as the archive mailbox, will be migrated to the EX01-DB database. This time, though, the procedure will be halted at 95%.

Wait a few moments after starting and then execute the following command:

Get-MoveRequestStatistics | Select-Object -Property * | Get-MoveRequestAdministrator

The SuspendWhenReadyToComplete attribute should now be set to True.

True if SuspendWhenReadyToCompleteTrue if SuspendWhenReadyToComplete

The StatusDetail property value will be AutoSuspended and the SuspendWhenReadyToComplete value will be False when the procedure achieves 95% completion.

Because SuspendWhenReadyToComplete was set to True when you initiated the move request, the Message property states the process was put on hold.

Requests for Moves are being removed.

A move request will look active while it is in progress. The move request should be withdrawn after the move is completed. What if, though, you change your mind and decide to cancel the move? In such scenario, the Remove-MoveRequest cmdlet may be used.

If you want to cancel a move request for the Administrator mailbox that you started previously, just pipe it to Remove-MoveRequest as shown below.

Get-MoveRequest | Remove-MoveRequest | Get-MoveRequest | Get-MoveRequest | Get-MoveRequest

Delete a Move RequestDelete a Move Request

.RecipientTypeDetails -like “DiscoveryMailbox”$ .RecipientTypeDetails -like “DiscoveryMailbox”$ .RecipientTypeDetails -like “DiscoveryMailbox”$ .RecipientTypeDetails -like “DiscoveryMailbox”

After you’ve gathered all of the discovery mailboxes in a database, you may create a new move request, same to how you would with an arbitration or user mailbox.

$DiscoveryMailbox | New-MoveRequest -TargetDatabase Ex02-db | $DiscoveryMailbox | $DiscoveryMailbox | $DiscoveryMailbox | $DiscoveryMailbox | $Discovery

DiscoverySearchMailbox is being moved.DiscoverySearchMailbox is being moved.

Get-MoveRequest keeps track of mailbox moves.

A request for a relocation does not happen right away. The Get-MoveRequest cmdlet may be used to check on the status of a move request. The Get-MoveRequest cmdlet returns a list of all active move requests.

The Get-MoveRequest command will provide a list of all current move requests, regardless of whether they were initiated using the web interface or PowerShell.

Get-MoveRequestGet-MoveRequest

The Exchange Management Console will not show a move request started from Powershell (Web Interface). The Get-MoveRequest command is the sole way to see these tasks.

Get-MoveRequest doesn’t tell you anything by default, as you can see in the picture above. It just shows the name of the mailbox, its present state, and the database to which it is being migrated. By passing the output to Select-Object or the Format-List cmdlet, you may inspect all of the properties it returns (fl alias).

Format-List | Get-MoveRequest

Other attributes, such as the source and destination, are now visible, however a % of the move’s progress would be helpful.

Get a list of all the properties for a relocation request.Get a list of all the properties for a relocation request.

Obtaining Statistics on Local Moves

The Get-MoveRequest cmdlet, as you can see, doesn’t provide a lot of information. To fix this, use Get-MoveRequestStatistics to stream the output of Get-MoveRequest. The Get-MoveRequestStatistics cmdlet offers a lot more information, such as the proportion of requests that have been completed.

Get-MoveRequestStatistics | Get-MoveRequest

Obtaining Statistics from Your MailboxObtaining Statistics from Your Mailbox

You may pipe the output of Get-MoveRequestStatistics to Select-Object or Format-List again, much as the result of Get-MoveRequest.

Format-List | Get-MoveRequestAdministrator | Get-MoveRequestStatistics

Because the Get-MoveRequestStatistics cmdlet produces a lot of helpful data, it’s critical that you know what many of the most relevant attributes signify.

  • Displayname: The target account’s display name.
  • PercentComplete: The proportion of the relocation that has been completed.
  • Completed, InProgress, and CreatingInitialSyncCheckpoint are all possible values for StatusDetail.
  • Suspend: The move request will be generated, but it will not be processed right away. It will be in the Suspend state, thus use Resume-MoveRequest -Identity administrator to resume the move request. The Suspend property will change to $false once you run this command, and the transfer request will begin.
  • SuspendWhenReadyToComplete: This option will sync up to 95% of the mailbox; however, the admin must finish the request using Resume-MoveRequest.
  • Number of malformed objects discovered during migration (BadItemsEncountered).
  • OverallDuration: The entire time it took to accomplish the migration.
  • TotalMailboxSize: The size of the mailbox in megabytes.
  • Message: Provides specific details regarding the relocation request. For example, if the -SuspendWhenReadyToComplete argument is set to $true in New-MoveRequest, the move process will halt at 95% and need the administrator to continue it. The following will be shown in the Message property: Informational: Because the SuspendWhenReadyToComplete option is set to $true, the move request for mailbox 60ba0d44-e046-4608-b162-6382bd9d070c is ready to finish and has been automatically suspended.

Continuation and Completion of a Move Request

The Restart-MoveRequestcommand is used to resume the move request. Unlike the New-MoveRequest, it doesn’t allow many arguments. Pipelining Resume-MoveRequest with Get-MoveRequest is the simplest method to utilize it. The Get-MoveRequest method retrieves the move request, whereas the Resume-MoveRequest method reads the move request and completes it.

Get-MoveRequest | Resume-MoveRequest | Get-MoveRequest | Get-MoveRequest | Get-MoveRequest

There will be no output from this command, But if Get-MoveRequestStatistics | Get-MoveRequest | fl is executed, you will notice that the Status is InProgress and the SyncStage is FinalIncrementalSync. Wait for a few minutes and run Get-MoveRequestStatistics | Get-MoveRequest ; you will notice that the progress is completed and the PercentComplete is 100.

After resuming a request for a relocation.After resuming a request for a relocation.

Requests for relocation are being put on hold.

When you submit a move request for a user’s main mailbox using New-MoveRequest, the mailbox owner may see the following message: “The Microsoft Exchange Administrator has made a modification that requires you to stop and restart Outlook.”

You could choose to relocate the user’s mailbox over the weekend to avoid any messages being shown to the mailbox owner. When the user returns to the workplace, they will be able to launch Outlook without any messages. This instance demonstrates why the -SuspendWhenReadyToComplete argument in New-MoveRequest could be useful.

Personally, I never use this command; instead, I notify the user of what I’m doing and what they may view.

Using the previous example, you may want to use the -SuspendWhenReadyToComplete argument, as shown below.

-Identity administrator -TargetDatabase ex01-db -ArchiveTargetDatabase ex01-db -BatchName “AdminMailbox” -SuspendWhenReadyToComplete New-MoveRequest -Identity administrator -TargetDatabase ex01-db -ArchiveTargetDatabase ex01-db -BatchName “AdminMailbox”

The Administrator account, as well as the archive mailbox, will be migrated to the EX01-DB database. This time, though, the procedure will be halted at 95%.

Wait a few moments after starting and then execute the following command:

Get-MoveRequestStatistics | Select-Object -Property * | Get-MoveRequestAdministrator

The SuspendWhenReadyToComplete attribute should now be set to True.

True if SuspendWhenReadyToCompleteTrue if SuspendWhenReadyToComplete

The StatusDetail property value will be AutoSuspended and the SuspendWhenReadyToComplete value will be False when the procedure achieves 95% completion.

Because SuspendWhenReadyToComplete was set to True when you initiated the move request, the Message property states the process was put on hold.

Requests for Moves are being removed.

A move request will look active while it is in progress. The move request should be withdrawn after the move is completed. What if, though, you change your mind and decide to cancel the move? In such scenario, the Remove-MoveRequest cmdlet may be used.

If you want to cancel a move request for the Administrator mailbox that you started previously, just pipe it to Remove-MoveRequest as shown below.

Get-MoveRequest | Remove-MoveRequest | Get-MoveRequest | Get-MoveRequest | Get-MoveRequest

Delete a Move RequestDelete a Move Request

The “move mailbox database exchange 2013 powershell” is a command-line tool that allows users to move Exchange mailboxes. The command line tool is available in PowerShell and can be used on Exchange 2013 or 2016.

Frequently Asked Questions

Related Tags

  • new-moverequest
  • move mailbox from on premise to office 365 powershell
  • remove-moverequest
  • move mailbox to exchange online powershell
  • get-mailbox move request

Table of Content