Migrate Distribution Groups and Members between 365 Tenants and settings

Alex has already done the hard work for this which works well

Exchange Online Distribution List Migration Script | A blog about automation and technologies in the cloud (alexholmeset.blog)

I changed the script as the Source tenant had multiple domains and also stoped 365 Groups with the same name causing issues

#Connect with source tenant

#Connect with destination tenant

#Dist Groups list in array "1","2"
$DL = "1","2"

$ZSourceDomain = "sourcedomain.com"
$CSourceDomain = "sourcedomain2.com"
$DestinationDomain = "destinationdomain3.com"

foreach($D in $DL){

$List = @()
$List = Get-AzureADGroup -SearchString "$D"
#Remove office 365 Groups with same name , using SPO as identifier
$List = $list | ?{$_.proxyaddresses -match '.*SPO.*'}

$ZListMembers = @()
$ZListMembers = Get-AzureADGroupMember -ObjectId $List.ObjectId | Where-Object {$_.UserPrincipalName -like '*$ZSourceDomain'}

$ZListMembersUPN = @()
$ZListMembersUPN = $ZListMembers.UserPrincipalName

$CListMembers = @()
$CListMembers = Get-AzureADGroupMember -ObjectId $List.ObjectId | Where-Object {$_.UserPrincipalName -like '*$CSourceDomain'}

$CListMembersUPN = @()
$CListMembersUPN = $CListMembers.UserPrincipalName

New-DistributionGroup -Name $List.DisplayName -Description $List.Description -PrimarySmtpAddress $($List.MailNickName+"@$DestinationDomain")

foreach($ZListMemberUPN in $ZListMembersUPN){

Add-DistributionGroupMember -Identity $List.DisplayName -Member $ZListMemberUPN.replace("$ZSourceDomain","$DestinationDomain")


foreach($CListMemberUPN in $CListMembersUPN){

Add-DistributionGroupMember -Identity $List.DisplayName -Member $CListMemberUPN.replace("$CSourceDomain","$DestinationDomain")



Lets Export all Distribution settings from Source Tenant

#Connect with source tenant

Get-DistributionGroup -RecipientTypeDetails MailUniversalDistributionGroup | Export-Csv -Path “C:\Temp\dGroupsall.csv"

Lets Import and Set what we need to the Destination Tenant
This script does RequireSenderAuthenticationEnabled ( Delivery Restrictions ) , Owner ( ManagedBy ) and MemberJoinRestriction. You can add any new ones you would like to set from the Sheet

#Connect with destination tenant

Import-Csv -Path "C:\Temp\dGroupsall.csv" | ForEach-Object {

#Lets do this one by one incase one fails it doesn’t block other

#We need to convert the csv value to boolean to write to RequireSenderAuthenticationEnabled
[boolean] $RequireSenderAuthenticationEnabled = [system.convert]::toboolean($_.RequireSenderAuthenticationEnabled)
Set-DistributionGroup -Identity $_.Alias -RequireSenderAuthenticationEnabled $RequireSenderAuthenticationEnabled
Set-DistributionGroup -Identity $_.Alias -ManagedBy $_.ManagedBy
Set-DistributionGroup -Identity $_.Alias -MemberJoinRestriction $_.MemberJoinRestriction

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)