Create, start, monitor and complete a migration batch
At the end you will have moved a group of mailboxes into Exchange Online with a migration batch, checked each user's progress and finalised (or cleaned up) the batch.
What you need before step 1
Applies to: Exchange Online migration batches for remote move (hybrid), IMAP, staged, cutover and cross-tenant migrations, as documented by Microsoft
Admin roles you need
- Exchange Administrator or Global Administrator in Microsoft 365
- The Move Mailboxes role in Exchange Online, which Microsoft says is needed to run New-MigrationBatch and can be delegated to operators
Licences
- A Microsoft 365 licence that includes Exchange Online for each migrated user
Install instructions
https://learn.microsoft.com/powershell/exchange/exchange-online-powershell-v2Our step-by-step →Install stepsAlso have ready
- A migration endpoint for the source (see the Create a migration endpoint how-to). Cutover batches do not use a CSV.
- For IMAP: target mailboxes already created in Microsoft 365
7 steps
- 1
Build the CSV file
Where: Excel or any text editor on your admin computerRow 1 holds the column names, separated by commas. Each later row is one user, with values in the same order. Leave an empty value (but keep the comma) to use the batch default. Required columns:
- Remote move onboarding (hybrid):
EmailAddress. Optional: MailboxType. (BadItemLimit and LargeItemLimit are deprecated in Exchange Online; see the Data Consistency Score tip below.) - IMAP:
EmailAddress(the Microsoft 365 address),UserName(source sign-in),Password(source password). Up to 50,000 rows. - Staged:
EmailAddress; optional Password and ForceChangePassword. Up to 1,000 rows per batch.
Save as
.csv.EmailAddress,UserName,Password terrya@contoso.com,terry.adams,P@ssw0rd1 annb@contoso.com,ann.beebe,P@ssw0rd2You should see: A .csv file whose first line is exactly the header row for your migration type. - Remote move onboarding (hybrid):
- 2
Create the batch in the Exchange admin center
Where: Exchange admin center > Migration > Add migration batchSelect Add migration batch. Type a name with no spaces or special characters and choose Migrate to Exchange Online. Select Next. Choose the migration type (for example IMAP migration), confirm the prerequisites page, then on Set a migration endpoint pick your endpoint. On Add user mailboxes select Import CSV file and upload your CSV. Set any filtering options, then on Schedule batch migration choose how to start and how to complete the batch. Select Save, then Done.
You should see: The batch appears on the Migration page. If you chose to start it automatically, its status shows Syncing. - 3
Or create the batch in PowerShell
Where: PowerShell on your admin computer, connected with Connect-ExchangeOnlineThe CSV must be read into bytes with
[System.IO.File]::ReadAllBytes(). First line: hybrid remote move into contoso.mail.onmicrosoft.com. Second: IMAP, skipping two folders. Add-AutoStartto start at once and-NotificationEmailsto get status reports. Use-CompleteAfterto sync now but hold completion until a set time (UTC unless you give an offset).New-MigrationBatch -Name RemoteOnBoarding1 -SourceEndpoint Endpoint1 -TargetDeliveryDomain contoso.mail.onmicrosoft.com -CSVData ([System.IO.File]::ReadAllBytes("C:\Migration\RemoteOnBoarding1.csv")) -NotificationEmails admin@contoso.com New-MigrationBatch -Name IMAPbatch1 -SourceEndpoint IMAP_SSL_Endpoint -CSVData ([System.IO.File]::ReadAllBytes("C:\Migration\IMAPmigration_1.csv")) -ExcludeFolders "Deleted Items","Junk Email" -AutoStartYou should see: PowerShell returns the batch with its Identity and Status. - 4
Start the batch
Where: Same PowerShell session, or Exchange admin center > Migration > select the batch > Resume migrationIf you did not use
-AutoStartor an automatic start in the admin center, start the batch now.Start-MigrationBatch -Identity RemoteOnBoarding1You should see: The batch status changes to Syncing. - 5
Monitor the batch and each user
Where: Same PowerShell session, or Exchange admin center > Migration > select the batch > View detailsCheck overall status, then per-user detail.
-IncludeReportadds troubleshooting detail; the skipped items line shows what could not be copied.Get-MigrationBatch -Identity RemoteOnBoarding1 Get-MigrationUser -BatchId RemoteOnBoarding1 | Get-MigrationUserStatistics Get-MigrationUserStatistics -Identity terrya@contoso.com -IncludeReport | Format-List Status,Error,Report Get-MigrationUserStatistics -Identity terrya@contoso.com | Format-List SkippedItemCount,SkippedItemsYou should see: The batch reaches Synced (initial copy done) or Synced with errors (some users failed). Users then sync incrementally every 24 hours for most migration types. - 6
Complete a remote move or Gmail batch
Where: Same PowerShell session, or Exchange admin center > Migration > select the batch > Complete migration batchWhen the batch is Synced or SyncedWithErrors, complete it. This runs a final incremental sync, points Outlook profiles at the new mailbox and converts the source mailbox to a mail-enabled user. Do not rerun it within 8 hours; if it seems stuck, check for unapproved skipped items.
Complete-MigrationBatch -Identity RemoteOnBoarding1 -NotificationEmails admin@contoso.com Set-MigrationUser -Identity terrya@contoso.com -ApproveSkippedItemsYou should see: The batch status changes to Completed. - 7
Finish an IMAP or cutover batch
Where: Your DNS host, then Exchange admin center > MigrationIMAP, cutover and staged batches have no completion step in Exchange Online, so Complete-MigrationBatch does not apply. Point your MX record at Microsoft 365, let the batch keep syncing (Microsoft suggests at least 72 hours for IMAP because sync runs once a day), then select the batch and choose Delete, or run
Remove-MigrationBatch.Remove-MigrationBatch -Identity IMAPbatch1You should see: The batch is no longer listed on the Migration page and synchronisation stops.
Expert tips
Create and start batches days ahead so the bulk copy happens in business hours with no user impact. After the initial sync, Microsoft keeps most migration types in incremental sync every 24 hours, so the final delta is small. Use -CompleteAfter (UTC unless you add an offset) or manual completion to finalise in your agreed window. Do not pre-stage too far ahead: Microsoft stops Synced batches with no admin activity after 60 days.
The old -BadItemLimit and -LargeItemLimit (default 0, so any bad item failed the move) are deprecated in Exchange Online. Microsoft now grades each move: Perfect and Good need no action, Investigate needs you to approve skipped items before remote move and Google Workspace batches can complete, and Poor needs Microsoft Support. Review SkippedItems in Get-MigrationUserStatistics, then approve with Set-MigrationUser -ApproveSkippedItems or Set-MigrationBatch -ApproveSkippedItems. IMAP, cutover and staged moves need no approval.
Read the cause first with Get-MigrationUserStatistics -Identity user@contoso.com -IncludeReport. After fixing it, select Resume migration (or run Start-MigrationBatch) on the batch; Microsoft says it then attempts the mailboxes that failed.
Run a small batch with your own and a volunteer's mailbox before the first real wave. It proves the endpoint, licences, CSV format and completion behaviour (Outlook profile switch, mail-enabled user conversion) end to end. Then size real waves so completion fits your window.
IMAP batches have no completion step. Change MX, then keep the batch syncing for at least 72 hours (Microsoft's suggestion, because sync runs once a day) to catch mail that landed on the old server. The IMAP CSV holds user passwords in clear text: store it securely and delete it when the batch is removed.
How to confirm it worked
In the Exchange admin center go to Migration, select the batch and check its status is Completed (or Synced for IMAP) with zero in the Failed column.
Run
Get-MigrationUser -BatchId RemoteOnBoarding1 | Get-MigrationUserStatisticsand check every user shows a completed or synced status.Sign in to Outlook on the web as a migrated user and confirm folders and recent mail are present.
How to reverse it
Before completion you can stop a batch (Stop migration in the admin center or Stop-MigrationBatch) and remove it. After a remote move batch completes, the mailbox lives in Exchange Online and the source is converted to a mail user; reversing it means a new offboarding move back to Exchange Server, not an undo. Deleting an IMAP batch stops sync but leaves copied mail in place.
Errors you might see
Synced with errorsCause: The initial sync finished but some mailboxes failed.
Fix: Run Get-MigrationUserStatistics -Identity user@contoso.com -IncludeReport | Format-List Status,Error,Report for each failed user and fix the cause. For IMAP, check the EmailAddress column holds the correct Microsoft 365 address.
Batch appears stuck after Complete-MigrationBatchCause: The batch was already signalled for completion (Microsoft says repeats within 8 hours may not be processed), or skipped items are waiting for approval.
Fix: Wait, and approve skipped items with Set-MigrationUser -ApproveSkippedItems.
Complete-MigrationBatch -SyncAndComplete returns an errorCause: SyncAndComplete needs zero failed, corrupted or stopped items.
Fix: Fix or approve the failed items, or complete without -SyncAndComplete.
Batch stopped on its ownCause: Microsoft stops Synced batches with no admin activity for 60 days.
Fix: Resume the batch, then complete it. Stopped or Failed batches are removed after 90 days and Completed batches after 60 days.
Questions
How many users can one CSV hold?
Microsoft documents up to 50,000 rows (10 MB) for IMAP and up to 1,000 rows per staged migration batch.
How often does a batch sync after the first copy?
For most migration types, Microsoft says source and target synchronise every 24 hours during incremental sync.
What does -AutoComplete do?
It finalises each mailbox as soon as its initial sync finishes. It only works for local moves and remote move migrations.
Can I see progress in the admin center?
Yes. Select the batch on the Migration page and choose View details for the migration users status report.
Official sources
Vendors change menus and requirements. Confirm on the source before you rely on a detail. Last checked 4 Nov 2026.