Office 365 Tenant to tenant migrations

This page is collection of powershell “oneliners” that I've used to migrate items from Office 365 tenant to another

Distribution Group Migrations

Exporting classic distribution groups to .csv files

Connect-ExchangeOnline
Get-DistributionGroup -ResultSize Unlimited | Select-Object DisplayName,PrimarySmtpAddress,@{Name="EmailAddresses";Expression={$_.EmailAddresses | Where-Object {$_ -clike "smtp*"}}},RequireSenderAuthenticationEnabled | Export-Csv -Encoding UTF8 -NoTypeInformation C:\temp\exported_distributionlists.csv

And importing distribution lists. If importing another tenant, remember to clean onmicrosoft.com aliases and rename domains if needed.

Import-Csv C:\temp\distribution_list_export.csv | foreach {
$proxyaddresses = $_.EmailAddresses -split ' '
$managers = $_.ManagedBy -split ' '
New-DistributionGroup -Name $_.DisplayName -ManagedBy $managers -PrimarySmtpAddress $_.PrimarySmtpAddress -RequireSenderAuthenticationEnabled $_.RequireSenderAuthenticationEnabled -WhatIf
Set-DistributionGroup -Identity $_.DisplayName -EmailAddresses @{add= $proxyaddresses} -WhatIf
}

Exporting distribution lists members. I borrowed this from Internet. Problem is that this script does not output nice .csv file, needs to be redesigned.

Connect-ExchangeOnline
$objDistributionGroups = Get-DistributionGroup -ResultSize Unlimited
Foreach ($objDistributionGroup in $objDistributionGroups)
{
    write-host "Processing $($objDistributionGroup.DisplayName)..."
    #Get members of this group
    $objDGMembers = Get-DistributionGroupMember -Identity $($objDistributionGroup.PrimarySmtpAddress)
    write-host "Found $($objDGMembers.Count) members..."
    #Iterate through each member
    Foreach ($objMember in $objDGMembers)
    {
        Out-File -FilePath C:\temp\exported_distributiongroup_members.csv -InputObject "$($objDistributionGroup.DisplayName),$($objDistributionGroup.PrimarySMTPAddress),$($objMember.DisplayName),$($objMember.PrimarySMTPAddress),$($objMember.RecipientType)" -Encoding UTF8 -append
    }
}

Lets say you add headers to file produced on previous script for example “DisplayName,PrimarySMTPAddress,User,UserPrimarySMTP,Mailboxtype” (Add first line on file)

You can import members to new tenant with following command

Import-Csv C:\temp\distributiongroup_importmembers.csv | foreach {
Add-DistributionGroupMember -Identity $_.DisplayName -Member $_.UserPrimarySMTP
}

Yet again pay attention to UPN if it needs to be changed before importing.