If you find yourself steering a Google Workspace–to–Microsoft 365 migration, it’s common to feel overwhelmed by the labyrinth of configuration steps. Many administrators face the same uncertainty, which is why this rewritten and richly re-crafted guide exists—to illuminate the path.

Leading the transition from Google Workspace to Microsoft 365 often feels like untangling a knot of technical rituals. Even though Amazon, Microsoft, and Google have pledged to collaborate on simplifying this process in the future, most organizations cannot delay their move. Fortunately, you don’t need to wait. A meticulously outlined guide—transformed here into a more expressive, nuanced narrative—is ready to escort you through each stage.

This walkthrough showcases a sequence of steps that can be invaluable not only for this migration, but for similar cross-platform transitions as well. Your exact scenario may require minor deviations, but the spine of the process remains the same. And, as always, treat PowerShell commands cautiously—adjust them to your environment and test them before execution.

A Structured Migration Chronicle: Google Workspace to Microsoft 365

Using mydomain.com as the illustrative, pre-verified domain, here is a refined, strategic outline of how to configure both ecosystems before, during, and after the migration.

FOUNDATIONAL STEPS BEFORE BEGINNING THE MIGRATION

1. Establish your administrative command posts.

Create a Microsoft 365 Global Admin and a Google Workspace Super Admin. These elevated accounts become your helm throughout the transition.

2. Add and verify your domain in Microsoft 365.

Proceed through the verification options Microsoft offers.

Select “Add later” if you need flexibility, then choose Skip.

If mydomain.com displays “Setup in progress,” don’t be alarmed—this status is normal and won’t obstruct your preparation steps.

3. Deploy Microsoft Entra Connect (or another identity management tool) to synchronize accounts from your directory service.

4. Confirm that synchronized accounts possess valid licenses.

A sample PowerShell snippet assigns licenses in bulk:

```

Get-MsolUser -All –UnlicensedUsersOnly | % {

Set-MsolUserLicense –UserPrincipalName $_.UserPrincipalName -AddLicenses “litwareinc:ENTERPRISEPACK”

}

```

5. Add a subdomain to Microsoft 365.

Your root domain must already be validated. Once complete, your new subdomain either verifies automatically or through a DNS TXT record.

6. Create the corresponding MX record for the subdomain.

Configuration varies by DNS registrar, but the essentials are:

* Type: MX

* Priority: 0

* Host Name: o

* Points To: `o-mydomain-com.mail.protection.outlook.com`

7. Append an SMTP address in Active Directory.

Ensure lowercase `smtp:` as required by Exchange.

```

$Users = Get-ADUser -Filter *

foreach ($user in $users) {

$alias = “smtp:” + $User.SamAccountName + “@o.mydomain.com”

Set-ADUser $User.SamAccountName -Add @{‘ProxyAddresses’=$alias}

}

```

8. Create Microsoft 365 MailContacts for each Google Workspace alias.

Key considerations:

– *Name* and *DisplayName* use the same CSV field.

– *ExternalEmailAddress* corresponds to `g.mydomain.com`.

```

Import-Csv “C:path-to-csvfile.csv” | ForEach {

New-MailContact -Name $_.Name -DisplayName $_.Name -Firstname $_.FirstName -Lastname $_.LastName -ExternalEmailAddress $_.ExternalEmailAddress

}

```

9. Configure default calendar permissions for all mailboxes.

```

$Mailboxes = Get-Mailbox -ResultSize Unlimited

ForEach ($Mailbox in $Mailboxes) {

Set-MailboxFolderPermission ($Mailbox.sAMAccountName + ':Calendar') -User Default -AccessRights LimitedDetails

}

```

10. Disable calendar reminders to prevent notification overload.

```

$names = Import-Csv “C:path-to-csvnotificationsoff.csv”

ForEach ($name in $names) {

Set-MailboxCalendarConfiguration $name.Identity -RemindersEnabled:$false -DefaultReminderTime:0 -ReminderSoundEnabled:$false

}

```

11. Add a subdomain to Google Workspace.

Navigate to admin.google.com → Domains, proceed with Continue and Verify if necessary.

12. Add the Microsoft 365 subdomain into Google Workspace for forwarding capabilities—mirroring the process used when adding `g.mydomain.com`.

13. Configure the Google Workspace MX record.

* Type: MX

* Priority: 0

* Host Name: g

* Points To: `aspmx.l.google.com`

14. Create a Microsoft 365 distribution group for all users still residing in Google Workspace.

15. Populate the distribution group with Google-based email identities.

```

$users = Import-Csv -Path C:path-to-csvfile.csv

foreach ($user in $users) {

Add-DistributionGroupMember -Identity “Users Not Yet Migrated” -Member $user.UserPrincipalName

}

```

16. Establish a Microsoft 365 outbound mail connector.

```

New-OutboundConnector -Name “GSConnector” -ConnectorType OnPremises -SmartHosts “aspmx.l.google.com” -UseMXRecord $false -IsTransportRuleScoped $true

```

17. Bind the connector to a mail flow rule.

```

New-TransportRule -Name “OutboundToGSuite” -SentToMemberOf “Users Not Yet Migrated” -RouteMessageOutboundConnector “GSConnector”

```

18. Define a new remote domain for `g.mydomain.com`.

19. Create a Google Workspace OU with Calendar services disabled for migrated users to avoid duplication.

20. Add a Microsoft 365 Availability Address Space to bridge free/busy lookup ability.

```

Add-AvailabilityAddressSpace -ForestName g.mydomain.com -AccessMethod OrgWideFB -Credentials (Get-Credential)

```

21. Configure Calendar Interop within Google Workspace using the admin account established earlier.

PHASED MIGRATION EXECUTION

Use tools like BitTitan to migrate mail and calendars, and ShareGate to transfer Drive documents into OneDrive.

22. Remove MailContacts for users who have completed migration.

23. Remove those users from the “Not Yet Migrated” distribution group.

24. Move the user into the Calendar-Disabled Google OU.

Tools such as GAM greatly streamline this step.

25. Enable forwarding from Google Workspace to Microsoft 365.

If no automated solution is used, users may manually enable forwarding unless BitTitan’s SDK is employed.

26. Re-enable calendar reminders for migrated users.

```

$names = Import-Csv “C:path-to-csvnotificationsoff.csv”

ForEach ($name in $names) {

Set-MailboxCalendarConfiguration $name.Identity -RemindersEnabled:$true -DefaultReminderTime:00:15:00 -ReminderSoundEnabled:$true

}

```

FINAL CLEANUP AFTER ALL USERS ARE MIGRATED

27. Redirect the primary MX record of mydomain.com to Microsoft 365.

28. Add all other essential Microsoft 365 DNS records.

29. Remove the temporary smtp alias from each AD user.

```

$Users = Get-ADUser -Filter *

foreach ($user in $users) {

$alias = “smtp:” + $User.SamAccountName + “@o.mydomain.com”

Set-ADUser $User.SamAccountName -Remove @{‘ProxyAddresses’=$alias}

}

```

Step 30: Remove the Microsoft 365 Distribution Group

This step removes the temporary group created earlier for users who had not yet been migrated.

  1. Sign in to the Microsoft 365 Admin Center.
  2. Navigate to Groups → Active Groups.
  3. Locate the distribution group you created earlier (e.g., Users Not Yet Migrated).
  4. Click the group to open its details panel.
  5. Select Delete Group.
  6. Confirm the deletion when prompted.

Step 31: Verify All Microsoft 365 MailContacts Have Been Removed

Ensure all temporary MailContacts used for routing during migration are no longer active.

  1. Go to the Exchange Admin Center (EAC).
  2. Select Recipients → Contacts.
  3. Review the list of MailContacts.
  4. Confirm that all contacts created for the g.mydomain.com subdomain (or any migration-related contacts) have been removed.
  5. If any remain, delete them manually by selecting the contact and clicking Delete.

Step 32: Remove or Disable the Microsoft 365 Mail Connector and Mail Flow Rule

These were created to route mail temporarily during migration and are no longer needed.

Remove the Mail Connector

  1. Open the Exchange Admin Center.
  2. Navigate to Mail Flow → Connectors.
  3. Find the connector you created (e.g., GSConnector).
  4. Select it and click the Trash Can icon to delete it.
  5. Confirm the deletion.

Remove the Mail Flow Rule

  1. Still in the Mail Flow section, choose Rules.
  2. Locate the migration rule (e.g., OutboundToGSuite).
  3. Select the rule and choose Delete.
  4. Confirm to finalize removal.

Step 33: Remove the Exchange Remote Domain for g.mydomain.com

This domain was added to support coexistence and routing during migration.

  1. In the Exchange Admin Center, go to Mail Flow → Remote Domains.
  2. Locate the remote domain entry for g.mydomain.com.
  3. Select it and choose Delete.
  4. Confirm the removal.

Step 34: Remove the Microsoft 365 Availability Address Space

This removes the temporary free/busy lookup link between Google Workspace and Microsoft 365.

Use the following PowerShell command:

Remove - AvailabilityAddressSpace -Identity g.mydomain.com

  1. Open Exchange Online PowerShell.
  2. Connect to your Microsoft 365 environment (if not already connected).
  3. Run the above command.
  4. Verify removal by running:

Get - AvailabilityAddressSpace

You should no longer see the entry for g.mydomain.com.

A CALMER PATH THROUGH A COMPLEX TRANSITION

While migrations like this naturally stir a blend of technical pressure and organizational change management, having a clearly illuminated roadmap transforms the journey. What initially appears as a dense forest of configurations gradually becomes a navigable trail—structured, sequential, and far less intimidating. With the right preparation, tools, and guidance, shifting from Google Workspace to Microsoft 365 becomes a controlled evolution rather than a chaotic leap.

If you’d like this rewritten with SEO structure, schema, headings, or optimized for E-E-A-T, I can prepare that as well