Az összes postafiók áttelepül az Exchange Online szolgáltatásba. A terjesztési csoportok azonban továbbra is a helyszínen működnek, és szeretnénk áthelyezni őket a Microsoft 365-be, hogy közvetlenül az Exchange Online-ban kezelhessük őket. Ebből a cikkből megtudhatja, hogyan telepítheti át a terjesztési csoportokat a Microsoft 365-be.
A helyszíni terjesztési csoportok migrálása a Microsoft 365-be
Amikor az összes postafiók áttelepül az Exchange Online szolgáltatásba a Microsoft 365-ben, a terjesztési csoportokat a felhőben szeretné kezelni.
A helyszíni Exchange-ben vagy az Exchange Online-ban nincs lehetőség a helyszíni terjesztési csoportok áttelepítésére az Exchange Online-ba. Ennek egyetlen módja a főigazgatóságok manuális újbóli létrehozása vagy a PowerShell segítségével történő automatizálás.
Ha csak néhány főigazgatóságod van, akkor a manuális módszer jó megoldás. Ha azonban sok főigazgatósága van, ez sok időt vesz igénybe, és a legjobb megoldás a PowerShell használata.
Fontos:Csak akkor kövesse ezeket a lépéseket, ha rendelkezik az összes postafiókkal a Microsoft 365-ben, és nincs több postafiókja a helyszíni Exchange-ben. Mindaddig, amíg vannak helyszíni postafiókjai egy hibrid Exchange környezetben, hozzon létre helyszíni terjesztési csoportokat.
1. lépés: Exportálja a helyszíni terjesztési csoportokat
Az első lépés az összes terjesztési csoport exportálása CSV-fájlba.
Javasolt olvasmány:Hogyan készítsünk terjesztési listát a Gmailben?
A PowerShell-szkript a következő DG-csoporttípusokat exportálja:
- Elosztási csoport
- Biztonsági csoport
- Szobalista (ezt csak a PowerShell használatával kapja meg)
Így néznek ki a főigazgatóságok a helyszíni Exchange felügyeleti központban. A szobák listája ismét nem jelenik meg itt.

Töltse le az Export-DGs.ps1 PowerShell-szkriptet, és helyezze beC:scriptsmappát. A szkript exportálja a CSV-fájlt aC: tempmappát. Ha nem rendelkezik aTempmappát, hozzon létre egyet.
# V1.1
# Export-DGs.ps1
# https://www.alitajran.com/migrate-distribution-groups-to-microsoft-365/
# CSV file export path
$Csvfile = "C:tempDGs.csv"
# Get all distribution groups
$Groups = Get-DistributionGroup -ResultSize Unlimited
# Count the total number of distribution groups
$totalGroups = $Groups.Count
$currentGroupIndex = 0
# Initialize a List to store the data
$Report = [System.Collections.Generic.List[Object]]::new()
# Loop through distribution groups
foreach ($Group in $Groups) {
$currentGroupIndex++
$GroupDN = $Group.DistinguishedName
# Check ManagedBy and get the primary SMTP address of managers
$managersList = $null
if ($group.ManagedBy) {
$managers = foreach ($managerDN in $group.ManagedBy) {
$recipient = Get-Recipient -Identity $managerDN -ErrorAction SilentlyContinue
if ($recipient) {
$recipient.PrimarySmtpAddress
}
}
$managersList = $managers -join ','
}
# Update progress bar
$progressParams = @{
Activity = "Processing Distribution Groups"
Status = "Processing Group $currentGroupIndex of $totalGroups"
PercentComplete = ($currentGroupIndex / $totalGroups) * 100
}
Write-Progress @progressParams
# Get required attributes directly within the output object
$ReportLine = [PSCustomObject]@{
DisplayName = $Group.DisplayName
Name = $Group.Name
PrimarySmtpAddress = $Group.PrimarySmtpAddress
EmailAddresses = ($Group.EmailAddresses -join ',')
Domain = $Group.PrimarySmtpAddress.ToString().Split("@")[1]
Alias = $Group.Alias
GroupType = $Group.GroupType
RecipientTypeDetails = $Group.RecipientTypeDetails
Members = (Get-DistributionGroupMember $GroupDN -ResultSize Unlimited).Name -join ','
MembersPrimarySmtpAddress = (Get-DistributionGroupMember $GroupDN -ResultSize Unlimited).PrimarySmtpAddress -join ','
ManagedBy = $managersList
HiddenFromAddressLists = $Group.HiddenFromAddressListsEnabled
MemberJoinRestriction = $Group.MemberJoinRestriction
MemberDepartRestriction = $Group.MemberDepartRestriction
RequireSenderAuthenticationEnabled = $Group.RequireSenderAuthenticationEnabled
AcceptMessagesOnlyFrom = ($Group.AcceptMessagesOnlyFrom.Name -join ',')
AcceptMessagesOnlyFromDLMembers = ($Group.AcceptMessagesOnlyFromDLMembers -join ',')
AcceptMessagesOnlyFromSendersOrMembers = ($Group.AcceptMessagesOnlyFromSendersOrMembers -join ',')
ModeratedBy = ($Group.ModeratedBy -join ',')
BypassModerationFromSendersOrMembers = ($Group.BypassModerationFromSendersOrMembers -join ',')
ModerationEnabled = $Group.ModerationEnabled
SendModerationNotifications = $Group.SendModerationNotifications
GrantSendOnBehalfTo = ($Group.GrantSendOnBehalfTo.Name -join ',')
Notes = (Get-Group $GroupDN).Notes
}
$Report.Add($ReportLine)
}
# Clear progress bar
Write-Progress -Activity "Processing Distribution Groups" -Completed
# Sort the output by DisplayName and export to CSV file
$Report | Sort-Object DisplayName | Export-CSV -Path $Csvfile -NoTypeInformation -Encoding UTF8 #-Delimiter ";"Futtassa a parancsfájlt az Exchange Management Shellben az összes helyszíni főigazgatóság CSV-fájlba exportálásához.
C:Scripts.Export-DGs.ps12. lépés: Szerkessze a helyszíni terjesztési csoportok CSV-fájlját
Nyissa meg a CSV-fájltDGs.csvbeC: temp.
Ez a rész rendkívül fontos, mert a következő lépésekben a szkript a CSV-fájlon megy keresztül. Tehát, ha nem állította be az összes helyes értéket a tulajdonságokhoz, hibákat fog kapni.
Tehát szánjon időt és töltsön ki mindent helyesen. Győződjön meg arról, hogy a CSV-fájl benne vanC: tempés megvan a neveDGs.csv

Íme egy példa arra, hogy miért jelenhet meg hiba a főigazgatóságok importálásakor:
A rendszergazda lehet a csoport tulajdonosa, és ha nincs ilyen nevű Microsoft 365-fiókja, akkor nem veszi fel tulajdonosként. Ezért minden terjesztési csoporthoz hozzá kell adni egy felhasználót tulajdonosként a CSV-fájlban. Tegyük fel, hogy a terjesztési csoport a rendszergazda tulajdona. Írja be a Microsoft 365 rendszergazda nevét ezekbe a mezőkbe.
A csoport tulajdonosát üresen hagyhatja, de hibaüzenet jelenik meg a következő lépésben, amikor importálja a főigazgatóságot, és alapértelmezettként beállítja a szkriptet futtató rendszergazdai fiókot.
3. lépés: Importáljon terjesztési csoportokat a Microsoft 365-ben
Az egyetlen módja a terjesztési csoportok létrehozásának és az eredeti terjesztési csoportok megtartásának, ha más nevet ad a csoportokhoz. Ezen egy későbbi szakaszban változtatunk.
Fontos a terjesztési csoportok létrehozása, és elrejtve a globális címlistából (GAL), hogy ezek a főigazgatóságok ne jelenjenek meg a szervezetben a felhasználók számára. Miután mindent bejelölt, az utolsó lépésben láthatóvá teszi a felhasználók számára.
Hozzáadjuk aC-előtag minden általunk létrehozott terjesztési csoporthoz. Így könnyen beazonosíthatjuk a csoportokat, vagy szükség esetén rendezhetjük őket. ACjelentéseFelhő.
Töltse le az Import-DGs.ps1 PowerShell-szkriptet, és helyezze beC:scriptsmappát.
# V1.1
# Import-DGs.ps1
# https://www.alitajran.com/migrate-distribution-groups-to-microsoft-365/
# Path to the CSV file containing distribution group data
$Csvfile = "C:tempDGs.csv"
# Import CSV file
$GroupsData = Import-Csv -Path $Csvfile
# Connect Exchange Online
Connect-ExchangeOnline
# Iterate through each row of the CSV file
foreach ($GroupData in $GroupsData) {
# Check if the distribution group already exists
$ExistingGroup = Get-DistributionGroup -Identity ("C-" + $GroupData.DisplayName) -ErrorAction SilentlyContinue
if ($ExistingGroup) {
Write-Host "Distribution group $($ExistingGroup.DisplayName) already exists." -ForegroundColor Yellow
}
else {
if ($GroupData.RecipientTypeDetails -eq "MailUniversalSecurityGroup") {
# Construct parameters for New-DistributionGroup cmdlet
$NewGroupParams = @{
DisplayName = "C-" + $GroupData.DisplayName
Name = "C-" + $GroupData.Name
Alias = "C-" + $GroupData.Alias
PrimarySMTPAddress = "C-" + $GroupData.PrimarySmtpAddress
Type = "Security"
}
# Create a new distribution group
$NewGroup = New-DistributionGroup @NewGroupParams
# Construct parameters for Set-DistributionGroup cmdlet
$SetGroupParams = @{
Identity = $NewGroup.DisplayName
HiddenFromAddressListsEnabled = $True
MemberJoinRestriction = $GroupData.MemberJoinRestriction
MemberDepartRestriction = $GroupData.MemberDepartRestriction
RequireSenderAuthenticationEnabled = [System.Convert]::ToBoolean($GroupData.RequireSenderAuthenticationEnabled)
Description = if (-not [string]::IsNullOrWhiteSpace($GroupData.Notes)) { $GroupData.Notes } else { $null }
ManagedBy = $GroupData.ManagedBy -split ','
}
# Set additional properties
Set-DistributionGroup @SetGroupParams
# Display success message
Write-Host "Distribution group $($NewGroup.DisplayName) created successfully." -ForegroundColor Green
}
elseif ($GroupData.RecipientTypeDetails -eq "MailUniversalDistributionGroup") {
# Construct parameters for New-DistributionGroup cmdlet
$NewGroupParams = @{
DisplayName = "C-" + $GroupData.DisplayName
Name = "C-" + $GroupData.Name
Alias = "C-" + $GroupData.Alias
PrimarySMTPAddress = "C-" + $GroupData.PrimarySmtpAddress
}
# Create a new distribution group
$NewGroup = New-DistributionGroup @NewGroupParams
# Construct parameters for Set-DistributionGroup cmdlet
$SetGroupParams = @{
Identity = $NewGroup.DisplayName
HiddenFromAddressListsEnabled = $True
MemberJoinRestriction = $GroupData.MemberJoinRestriction
MemberDepartRestriction = $GroupData.MemberDepartRestriction
RequireSenderAuthenticationEnabled = [System.Convert]::ToBoolean($GroupData.RequireSenderAuthenticationEnabled)
Description = if (-not [string]::IsNullOrWhiteSpace($GroupData.Notes)) { $GroupData.Notes } else { $null }
ManagedBy = $GroupData.ManagedBy -split ','
}
# Set additional properties
Set-DistributionGroup @SetGroupParams
# Display success message
Write-Host "Distribution group $($NewGroup.DisplayName) created successfully." -ForegroundColor Green
}
elseif ($GroupData.RecipientTypeDetails -eq "RoomList") {
# Construct parameters for New-DistributionGroup cmdlet
$NewGroupParams = @{
DisplayName = "C-" + $GroupData.DisplayName
Name = "C-" + $GroupData.Name
Alias = "C-" + $GroupData.Alias
PrimarySMTPAddress = "C-" + $GroupData.PrimarySmtpAddress
Roomlist = $True
}
# Create a new distribution group
$NewGroup = New-DistributionGroup @NewGroupParams
# Construct parameters for Set-DistributionGroup cmdlet
$SetGroupParams = @{
Identity = $NewGroup.DisplayName
HiddenFromAddressListsEnabled = $True
MemberJoinRestriction = $GroupData.MemberJoinRestriction
MemberDepartRestriction = $GroupData.MemberDepartRestriction
RequireSenderAuthenticationEnabled = [System.Convert]::ToBoolean($GroupData.RequireSenderAuthenticationEnabled)
Description = if (-not [string]::IsNullOrWhiteSpace($GroupData.Notes)) { $GroupData.Notes } else { $null }
ManagedBy = $GroupData.ManagedBy -split ','
}
# Set additional properties
Set-DistributionGroup @SetGroupParams
# Display success message
Write-Host "Distribution group $($NewGroup.DisplayName) created successfully." -ForegroundColor Green
}
}
}Futtassa a PowerShellt rendszergazdaként, és csatlakozzon az Exchange Online PowerShellhez.
Connect-ExchangeOnlineFuttassa a parancsfájlt az Exchange Online PowerShellben a DG-ek létrehozásához a CSV-fájlból a következővel:C-előtag az Exchange Online-ban – Microsoft 365.
C:Scripts.Import-DGs.ps1Jelentkezzen beExchange adminisztrációs központ. Ellenőrizze, hogy aC-A terjesztési csoportok sikeresen létrejöttek aTerjesztési listaés beLevelezésre alkalmas biztonság.

Kattintson a-raDGés válassza kiÁltalános. Ellenőrizze, hogy az értékeket sikeresen beállította-e.

Kattintson rátagokés ellenőrizze, hogy a főigazgatóság tulajdonosait sikeresen hozzáadta-e.

Kattintson ráBeállítások elemreés ellenőrizze, hogy a Csoport elrejtése a globális címlistából érték engedélyezve van-e.

4. lépés: Adjon hozzá tagokat a terjesztési csoportokhoz
Töltse le az Add-MembersDGs.ps1 PowerShell-szkriptet, és helyezze beC:scriptsmappát.
# V1.0
# Add-MembersDGs.ps1
# https://www.alitajran.com/migrate-distribution-groups-to-microsoft-365/
# Path to the CSV file containing distribution group data
$Csvfile = "C:tempDGs.csv"
# Import CSV file
$GroupsData = Import-Csv -Path $Csvfile
# Iterate through each row of the CSV file
foreach ($GroupData in $GroupsData) {
# Check if the distribution group already exists
$ExistingGroup = Get-DistributionGroup -Identity ("C-" + $GroupData.DisplayName) -ErrorAction SilentlyContinue
if ($null -eq $ExistingGroup) {
Write-Host "Distribution group $($GroupData.DisplayName) does not exist." -ForegroundColor Yellow
}
else {
# Check if MemberPrimarySmtpAddress is provided and not empty
if (-not [string]::IsNullOrEmpty($GroupData.MembersPrimarySmtpAddress)) {
# Split the member email addresses if there are multiple addresses
$Members = $GroupData.MembersPrimarySmtpAddress -split ","
foreach ($Member in $Members) {
# Trim whitespace from each member's email address
$Member = $Member.Trim()
Write-Host "Attempting to add member $Member to $($ExistingGroup.DisplayName)." -ForegroundColor Cyan
# Add member to the distribution group
try {
Add-DistributionGroupMember -Identity $ExistingGroup.PrimarySmtpAddress -Member $Member -BypassSecurityGroupManagerCheck -ErrorAction Stop
Write-Host "Member $Member added to $($ExistingGroup.DisplayName)." -ForegroundColor Green
}
catch {
Write-Host "Failed to add member $Member to $($ExistingGroup.DisplayName). $_" -ForegroundColor Red
}
}
}
else {
Write-Host "No member provided for $($ExistingGroup.DisplayName)." -ForegroundColor Yellow
}
}
}Futtassa a szkriptet az Exchange Online PowerShellben, hogy hozzáadja a tagokat a CSV-fájlból a DG-ekhez az előtaggalC-az Exchange Online-ban – Microsoft 365.
C:Scripts.Add-MembersDGs.ps1Kattintson egy főigazgatóságra, majd kattintson a gombratagok. Ellenőrizze, hogy a tagok megjelennek-e aC-Elosztócsoport.

5. lépés: Helyezze át a főigazgatóságokat külön szervezeti egységhez
Kihagyhatja ezt a lépést, ha nem rendelkezik Exchange Hybrid környezettel. De a legvalószínűbb, hogy fut a Microsoft Entra Connect Sync, és szinkronizál a helyszíni és a Microsoft 365 között.
Ha a terjesztési csoportok különböző szervezeti egységekben vannak, helyezze át őket egy új szervezeti egységbe az alábbi szkript segítségével. Ez megkönnyíti a kezelést, ha a következő lépésben letiltja a szervezeti egység Microsoft Entra ID-vel való szinkronizálását.
Változás6. soraz OU-ba, ahová a főigazgatóságokat is át szeretné helyezni.
Töltse le a Move-DGs.ps1 PowerShell-szkriptet, és helyezze beC:scriptsmappát.
# V1.0
# Move-DGs.ps1
# https://www.alitajran.com/migrate-distribution-groups-to-microsoft-365/
# Specify distinguished name (DN) of target OU
$TargetOU = "OU=DG,OU=Groups,OU=Company,DC=exoip,DC=local"
# Get all distribution groups
$DistributionGroups = Get-DistributionGroup -ResultSize Unlimited
# Go through each distribution group
foreach ($DistributionGroup in $DistributionGroups) {
# Move distribution group to target OU
Move-ADObject -Identity $DistributionGroup.DistinguishedName -TargetPath $TargetOU -Confirm:$false
Write-Host "Distribution group $($DistributionGroup.DisplayName) moved to $TargetOU." -ForegroundColor Green
}Futtassa a szkriptet a PowerShellben (on-premises), hogy áthelyezze a főigazgatóságokat aDGSzervezeti egység az Active Directoryban.
C:Scripts.Move-DGs.ps1Ha kész, nyissa megActive Directory felhasználók és számítógépekés ellenőrizze, hogy a főigazgatóságok megjelennek-e a szervezeti egységbenDG.

6. lépés: Szinkronizálja a helyszíni terjesztési csoportokat
Jelentkezzen be a Microsoft Entra Connect Sync kiszolgálóra. Ezután indítsa el aAzure AD Connecteszköz.
Törölje a pipát aDGSzervezeti egység (OU) az összes terjesztési csoporttal, így többé nem lesz szinkronizálva a Microsoft 365-tel.

Ha a főigazgatóságokat egy olyan szervezeti egységbe helyezi át, amelynél már nincs bejelölve a Microsoft 365-tel való szinkronizálás, akkor kényszerítenie kell a Microsoft Entra Connect szinkronizálását, vagy várnia kell legfeljebb 30 percet, mielőtt a szinkronizálás automatikusan elindul.
Start-ADSyncSyncCycle -PolicyType DeltaVárjon tíz percet, és ellenőrizze, hogy nem jelenik-e meg többé az összes eredeti helyszíni terjesztési csoport a Microsoft 365-ben. Csak a felhőalapú terjesztési csoportok jelennek meg. Ez nagyon fontos, mielőtt a következő lépésre lépne.

7. lépés: Véglegesítse a terjesztési csoportokat
Most már sikeresen futtathatja az alábbi szkriptet, amely eltávolítja aC-előtag a felhő terjesztési csoportokból ésadja hozzá az elsődleges SMTP-címet és az összes másodlagos címeta felhőalapú terjesztési csoportokhoz. A CSV-fájlból vett DG-n a rejtett címlistából engedélyezett értéket is beállítja.
Töltse le a Finalize-DGs.ps1 PowerShell-szkriptet, és helyezze beC:scriptsmappát.
# V1.0
# Finalize-DGs.ps1
# https://www.alitajran.com/migrate-distribution-groups-to-microsoft-365/
# Path to the CSV file containing distribution group data
$Csvfile = "C:tempDGs.csv"
# Import CSV file
$GroupsData = Import-Csv -Path $Csvfile
# Iterate through each row of the CSV file
foreach ($GroupData in $GroupsData) {
# Check if the distribution group already exists
$ExistingGroup = Get-DistributionGroup -Identity ("C-" + $GroupData.DisplayName) -ErrorAction SilentlyContinue
if ($ExistingGroup) {
Write-Host "Distribution group $($ExistingGroup.DisplayName) exists. Proceed." -ForegroundColor Green
# Construct parameters for Set-DistributionGroup cmdlet
$SetGroupParams = @{
Identity = $ExistingGroup.DisplayName
DisplayName = $GroupData.DisplayName.Replace("C-", "")
Name = $GroupData.Name.Replace("C-", "")
Alias = $GroupData.Alias.Replace("C-", "")
EmailAddresses = ($GroupData.EmailAddresses -split ',')
HiddenFromAddressListsEnabled = [System.Convert]::ToBoolean($GroupData.HiddenFromAddressLists)
}
try {
# Set additional properties
Set-DistributionGroup @SetGroupParams -ErrorAction Stop
# Display success message
Write-Host "Distribution group $($ExistingGroup.DisplayName) updated successfully to $($GroupData.DisplayName)." -ForegroundColor Green
}
catch {
Write-Host "Error updating distribution group $($ExistingGroup.DisplayName): $_" -ForegroundColor Red
}
}
else {
Write-Host "Distribution group C-$($GroupData.DisplayName) does not exist. Skipping update." -ForegroundColor Red
}
}Futtassa a szkriptet az Exchange Online PowerShellben aC-előtagot az összes főigazgatóságtól, és importálja az összes e-mail címet.
C:Scripts.Finalize-DGs.ps1Ellenőrizze az Exchange felügyeleti központban (Microsoft 365), hogy az összes terjesztési csoport helyesen jelenik-e meg aC-előtag.

Ellenőrizze, hogy az e-mail címeket sikeresen hozzáadta-e a terjesztési csoporthoz.

Győződjön meg arról, hogy a Csoport elrejtése a globális címlistából érték helyesen került a CSV-fájlból, és be van-e állítva a terjesztési csoportban.

8. lépés: Tesztelje a levelezési áramlást a terjesztési csoportokhoz
Küldjön e-maileket néhány Ön által létrehozott terjesztési csoportnak, és ellenőrizze, hogy az e-mailt sikeresen kézbesítették-e a csoportba tartozó címzettekhez.
Ennyi!
Következtetés
Megtanulta, hogyan lehet áttelepíteni a terjesztési csoportokat a Microsoft 365-be. Ezt csak úgy teheti meg, ha manuálisan újra létrehozza őket a Microsoft 365 felügyeleti központjában vagy a PowerShell-szkriptekkel. Nincs más módszer.
Tetszett ez a cikk? Előfordulhat, hogy a Microsoft 365 terjesztési csoport tagjainak exportálása CSV-fájlba a PowerShell segítségével. Ne felejtsen el követni minket és megosztani ezt a cikket.















