Pre-Migration
Before starting your migration with the IceWarp Exchange Migration Tool, ensure your environment is properly prepared. The following steps will help you set up a smooth, reliable, and interruption-free migration experience.
Step 1 – Plan your migration timing
- Choose the date when to switch to IceWarp.
- Verify that your current mail system license or subscription remains valid during the migration and that your environment is ready.
- Migration time depends on data size and user count — small migrations may finish within a day, while large ones can take several days. The following table provides approximate migration times depending on the size of your organization.
| Number of Users | Estimated Migration Time |
| Up to 50 | Up to 1 day (24 hours) |
| 50 to 1000 | Several days, up to 1 week |
| More than 1000 | Several weeks |
Step 2 – Set up the destination environment
Select your target deployment of IceWarp.
- For on-premises setup, install IceWarp Server in advance. A preconfigured virtual image for VMware or Hyper-V is available for quick deployment. Installations on Windows and Linux, or via Docker are also supported. Refer to the linked guides for installation details.
- For IceWarp Cloud, sign up for an IceWarp Cloud account and configure your domain before you begin (see our pricing for details).
Step 3 – Set Up Bulk Data Access from Exchange with Throttling Policy Management
To ensure a smooth migration of large data volumes from Microsoft Exchange to IceWarp, it’s important to adjust the throttling policy on your Exchange Server. By default, Exchange limits simultaneous requests and operations, which can slow down the migration process or cause timeouts for users actively using their mailboxes. This step explains how to optimize these limits to improve migration performance and stability.
Tool Setup Considerations
The IceWarp Exchange Migration Tool is designed with built-in capabilities that ensure stable and efficient data transfer during migration:
- Batching — Processes multiple items simultaneously for faster migration throughput.
- Impersonation — Uses a single service account to access multiple mailboxes securely.
- Automatic retry logic — Automatically retries operations when throttled or temporarily interrupted.
- Detailed logging — Records requests, responses, and any encountered errors for troubleshooting and auditing.
If using a compatible third-party EWS- or PowerShell-based migration script, make sure it supports these same features for optimal performance.
Throttling Policies in Exchange 2016
Exchange throttling policies control how many operations and connections can run simultaneously. Adjusting these limits improves migration performance by enabling smoother bulk operations and preventing throttling or slowdowns during large data transfers.
The following parameters are the most relevant for optimizing Exchange migrations:
- EWSMaxConcurrency — Defines how many simultaneous Exchange Web Services (EWS) connections are allowed.
- EWSMaxSubscriptions — Sets the maximum number of push or pull notifications that can be active at once.
- EWSFindCountLimit — Determines how many items (such as emails) can be returned in a single EWS query.
- RCAMaxConcurrency — Limits the number of concurrent MAPI (Outlook-style) connections per user.
- PowerShellMaxConcurrency — Controls the number of concurrent remote PowerShell sessions.
- MessageRateLimit — Specifies how many messages can be sent per minute by a user or service account.
Creating a Custom Throttling Policy
You need to create a custom throttling policy with relaxed limits and assign it to the service account that will be used for the migration.
1. Create a New Policy
New-ThrottlingPolicy -Name "BulkAccessPolicy" `
-EWSMaxConcurrency 50 `
-EWSMaxBurst 5000 `
-EWSRechargeRate 100 `
-EWSCutoffBalance 10000 `
-EWSMaxSubscriptions 100
2. Apply the Policy to Your Service Account
Run the following commands to assign your new throttling policy and verify it’s applied correctly:
Set-Mailbox "ServiceAccountName" -ThrottlingPolicy "BulkAccessPolicy"
# Check assignment
Get-Mailbox "ServiceAccountName" | fl ThrottlingPolicy
Best Practices for Bulk Access
- Use impersonation:
New-ManagementRoleAssignment -Name "impersonationAssignmentName" `
-Role "ApplicationImpersonation" `
-User "ServiceAccountName"
- Limit concurrent threads (10–20 parallel mailboxes).
- Batch read operations (e.g., 100 items per request).
- Implement backoff and retry (e.g., wait 30–60 seconds after throttling).
- Avoid long-running open connections.
Optional: Disable Throttling (Not Recommended for Production)
New-ThrottlingPolicy -Name "NoThrottle" `
-EWSMaxConcurrency Unlimited `
-EWSMaxBurst Unlimited `
-EWSRechargeRate Unlimited `
-EWSCutoffBalance Unlimited
Set-Mailbox "ServiceAccountName" -ThrottlingPolicy "NoThrottle"
Use only temporarily during migration or internal testing.
Step 4 – Grant Impersonation Rights for All Users in Exchange 2016
To migrate email data from multiple mailboxes efficiently, you need a service account that has permission to access all user mailboxes. This is done by granting the account Application Impersonation rights. It allows the account to act on behalf of any user during the migration process, accessing their mailboxes via EWS or other interfaces.
1. Create the Service Account
You can create a new service account using the following PowerShell command:
New-Mailbox -Name "ImpersonationService" `
-UserPrincipalName impersonation@yourdomain.com `
-Password (ConvertTo-SecureString -String 'P@ssword123!' -AsPlainText -Force) `
-DisplayName "Impersonation Service Account"
2. Assign Application Impersonation Rights
Run the command below to grant the service account impersonation rights over all users:
New-ManagementRoleAssignment -Name "ImpersonationAssignment" `
-Role "ApplicationImpersonation" `
-User "impersonation@yourdomain.com"
This command automatically applies impersonation rights across the entire Exchange organization. No wildcard or scope is necessary unless you want to limit it.
3. Optional: Limit Scope of Impersonation
If you don’t want the service account to access all mailboxes, and want to restrict the impersonation rights
to only specific users, groups, or organizational units, you can create a custom scope using the
New-ManagementScope cmdlet.
4. Verify or Remove Impersonation Rights
To view current impersonation assignments:
To remove an impersonation assignment: