M365 Tenant to Tenant | BitTitan

Header t t t bittitan
Reading Time: 6 minutes

There are couple of ways to preform a tenant-to-tenant migration. For email you can use the native Microsoft MRS proxy but you will need an enterprise agreement before that is possible. Other tooling like Quest-on-demand and BitTitan use API’s which make it slower but will do the job for you. The downside that it is only one-way migration and compared to the Microsoft native MRS proxy it is not synchronising. In M365 Cross Tenant Migration | Part I – GetToTheCloud I explain how to use the native tooling.

Using BitTitan can be a struggle. The documentation lacks information and support is not on a good level. Beside that the tooling does what is needs to do.

For this example we use the cheapest license (Pricing – BitTitan MigrationWiz) called Mailbox Migration ($12). It can be used to only one identity and cannot be reused. Keep in mind that Room/Equipment and Shared mailboxes also need a license. For migrating Archives you will need an additional add-on license. In the portal there is an option to assign licenses. For this type of license, you cannot do that within the portal. It will be assigned when you start the Full of Pre-Staged migration.

Full migration
With a full migration you create a cut over moment where all the e-mail is transferred to the new tenant. At that moment you cut over the mx records and the use of the account

Pre-Staged migration
With a pre-staged migration, you will migrate first the last x months to the new tenant. Users will start working with that data and receive the new e-mail in the new tenant. At that moment that users start working, you will start the migration of the rest of the e-mail.

Prepare Source tenant

First you need to do an inventory of the source tenant. M365 Cross Tenant Migration | Exchange Inventory – GetToTheCloud and M365 Migration | Exchange Inventory V2 | GetToTheCloud can be a good help with that. Use that export to determine the scope.
Also you need to create a service administrator account. This account will be used to create the connection to the tenant. This account needs to be Global Administrator without MFA and Exchange Administrator and needs to have an Office 365 license with mailbox. On both tenants you need to increase the EWS Throttling policy through the portal of https://admin.microsoft.com and request a support ticket.

Prepare Target tenant

The target tenant must be secure and setup with all the conditional access policies as required, including the security of Exchange Online. Order the correct amount of licenses and create a group in Azure Active Directory for group-based licensing.
Add the new domain to the tenant. If you are going to use the old domain you would use the .onmicrosoft.com domain for identity mapping.
Also you need to create a service administrator account. This will be used to create the connection to the tenant. This account needs to be Global Administrator without MFA and Exchange Administrator and needs to have an Office 365 license with mailbox.

BitTitan

BitTitan offers an co-existence when you have the other license : User Migration Bundle. The downside is that it is not functioning without a lot of changes. The co-existence will be build with a powershell script running on the backend. It is using basic authentication so that will not work if you not have extended the use of basic authentication. Also all new tenants since 1st April 2023 do not have the ability to enable this.

Using the legacy migration mode will need some work manually. I will explain what to do and how to setup.

Setup BitTitan

Assuming you have already created an account in BitTitan and added the needed licenses we will continue to setup a project.

Select Create Project

Select Mailbox Project

Provide a name for the project and select the customer

Create a new endpoint and fill in the source information

image-3

The same needs to be done for the Target tenant.

Skip the settings for the Co-Existence and finish creating the project.

To use the project for authenticating to Exchange Online, you will need Modern Authentication. This is the default in Exchange Online and we are going to use an App Registration for this.

Browse to Register an application – Microsoft Azure in the source tenant.

image-23

Public client/native (Mobile apps) with Redirect URI: urn:ietf:wg:oauth:2.0:oob

Browsing to the Authentication blade within the app registration, you need to enabled Allow public client flows. By default this is NO.

The app registration needs to be created in both tenants. This so the identity mapping can authenticate and discover. Now add some api permissions

API Permissions -> Add a Permission -> APIs my organization uses -> Office 365 Exchange Online -> EWS.AccessAsUser.All
DON’T FORGET TO GRANT ADMIN CONSENT!!
Again in both tenant this is needed!!

Start an Elevated PowerShell command prompt and run the following commands

#connection to Exchange Online source
Connect-ExchangeOnline

#Customize organization
Enable-OrganizationCustomization

#Enabled impersonation
New-ManagementRoleAssignment -Role "ApplicationImpersonation -user [Service account just created]

#Disconnect Exchange 
Disconnect-ExchangeOnline -Confirm:$false

This needs to be run on Source and Target environment.

Back to BitTitan portal, we go to the Advanced Options of the project. We are going to add the AppId and TenantID to this project

ModernAuthClientIdExport=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (source tenant)
ModernAuthTenantIdExport=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (source tenant)
ModernAuthClientIdImport=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (target tenant)
ModernAuthTenantIdImport=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (target tenant)
image-26

and Save the project !

Now you are all set to add users. This can be done multiple ways.
* Quick add by just providing Source mail address and Target address
* Bulk add by uploading a CSV
* Discovery Items

If you have used the Excel sheet you should be able to use a CSV to add this. In the CSV (which can be downloaded from the portal) only the Source mail address and the destination address required.

To make sure the mailboxes can be migrated you need to create the new mailbox on the target. The UPN is used to map the identity.

I just added two mailboxes to migrate manually

To verify if the mailboxes can be found on both sides, you can select the accounts and click Start -> Verify Credentials. No data will be migrated but only a permission check both sides to check if everything is correct in place for a migration.

If the status is set to Completed (verification), you will be able to start the migration.

Before you migrate

Before you migrate, you might want to forward the e-mail from the start of the migration form the source to the target. Keep in mind you place a forward rule on that mailbox with the option: -DeliverToMailboxAndForward $false

Also you would want to set the LegacyExchangeDN from the Source to the Target. You need to export this (if you use the Inventory script as mentioned above this will be exported to the Users tab) and add this to the NEW account as a X500 address.

Share and Enjoy !

Shares
Designer (23)

Stay close to the action—follow GetToThe.Cloud across social!
Deep dives and hands‑on how‑tos on Azure Local, hybrid cloud, automation, PowerShell/Bicep, AVD + FSLogix, image pipelines, monitoring, networking, and resilient design when the internet/Azure is down.

🔗 Our channels
▶️ YouTube: https://www.youtube.com/channel/UCa33PgGdXt-Dr4w3Ub9hrdQ
💼 LinkedIn Group: https://www.linkedin.com/groups/9181126/
✖️ X (Twitter): https://x.com/Gettothecloud
🎵 TikTok: https://www.tiktok.com/@gettothecloud
🐙 GitHub: https://github.com/GetToThe-Cloud/Website
💬 Slack: DM us for an invite
📲 WhatsApp: DM for the community link

WP Twitter Auto Publish Powered By : XYZScripts.com
We use cookies to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners. View more
Cookies settings
Accept
Privacy & Cookie policy
Privacy & Cookies policy
Cookie name Active

Who we are

Our website address is: https://www.gettothe.cloud

Comments

When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection. An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.

Media

If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.

Cookies

If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year. If you visit our login page, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser. When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed. If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.

Embedded content from other websites

Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website. These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.

Who we share your data with

If you request a password reset, your IP address will be included in the reset email.

How long we retain your data

If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue. For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.

What rights you have over your data

If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.

Where we send your data

Visitor comments may be checked through an automated spam detection service.
Save settings
Cookies settings