====== 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.