Kaikki postilaatikot on siirretty Exchange Onlineen. Jakeluryhmät ovat kuitenkin edelleen paikan päällä, ja haluamme siirtää ne Microsoft 365:een hallitaksemme niitä suoraan Exchange Onlinessa. Tässä artikkelissa opit siirtämään jakeluryhmiä Microsoft 365:een.
Siirrä paikalliset jakeluryhmät Microsoft 365:een
Kun kaikki postilaatikot on siirretty Exchange Onlineen Microsoft 365:ssä, haluat hallita jakeluryhmiä pilvessä.
Exchange on-premisesissa tai Exchange Onlinessa ei ole mahdollisuutta siirtää paikallisia jakeluryhmiä Exchange Onlineen. Ainoa tapa tehdä tämä on luoda pääosastot uudelleen manuaalisesti tai automatisoida se PowerShellillä.
Jos sinulla on vain pari pääosastoa, manuaalinen on hyvä lähestymistapa. Jos sinulla on kuitenkin useita pääosastoja, se vie paljon aikaasi, ja paras vaihtoehto on käyttää PowerShellia.
Tärkeää:Noudata näitä ohjeita vain, kun sinulla on kaikki postilaatikot Microsoft 365:ssä etkä enää postilaatikoita Exchange on-premisesissa. Niin kauan kuin sinulla on paikallisia postilaatikoita Exchange Hybrid -ympäristössä, sinun tulee luoda jakeluryhmiä paikallisesti.
Vaihe 1. Vie paikalliset jakeluryhmät
Ensimmäinen vaihe on viedä kaikki jakeluryhmät CSV-tiedostoon.
Suositeltu luettava:Kuinka luoda jakeluluettelo Gmailissa?
PowerShell-komentosarja vie seuraavat DG-ryhmätyypit:
- Jakeluryhmä
- Turvallisuusryhmä
- Huoneluettelo (saat tämän vain PowerShellin avulla)
Tältä pääosastot näyttävät Exchangen hallintakeskuksessa tiloissa. Jälleen, huoneluettelo ei näy tässä.

Lataa Export-DGs.ps1 PowerShell-komentosarja ja aseta seC: scriptskansio. Komentosarja vie CSV-tiedoston tiedostoonC: tempkansio. Jos sinulla ei ole aTempkansio, luo sellainen.
# 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 ";"Suorita komentosarja Exchange Management Shellissä viedäksesi kaikki paikalliset pääosastot CSV-tiedostoon.
C:Scripts.Export-DGs.ps1Vaihe 2. Muokkaa paikallisten jakeluryhmien CSV-tiedostoa
Avaa CSV-tiedostoDGs.csvsisäänC: temp.
Tämä osa on erittäin tärkeä, koska seuraavien vaiheiden komentosarja käy läpi CSV-tiedoston. Joten jos et ole asettanut kaikkia oikeita arvoja ominaisuuksille, saat virheitä.
Varaa siis aikaa ja täytä kaikki oikein. Varmista, että CSV-tiedosto on sisälläC: tempja sillä on nimiDGs.csv

Tässä on esimerkki siitä, miksi virhe saattaa ilmetä, kun tuot pääosastoja:
Järjestelmänvalvoja voi olla ryhmän omistaja, ja jos sinulla ei ole Microsoft 365 -tiliä tällä nimellä, se ei lisää sitä omistajaksi. Joten sinun tulee lisätä käyttäjä omistajaksi jokaisen jakeluryhmän CSV-tiedostoon. Oletetaan, että järjestelmänvalvoja omistaa jakeluryhmän. Täytä Microsoft 365 -järjestelmänvalvojan nimi näihin kenttiin.
Voit jättää ryhmän omistajan tyhjäksi, mutta näet virheilmoituksen seuraavassa vaiheessa, kun se tuo pääosaston ja asettaa komentosarjaa suorittavan järjestelmänvalvojan tilin oletukseksi.
Vaihe 3. Tuo jakeluryhmät Microsoft 365:ssä
Ainoa tapa luoda jakeluryhmät ja säilyttää alkuperäiset jakeluryhmät on lisätä ryhmille eri nimi. Muutamme tämän myöhemmin.
On tärkeää luoda jakeluryhmät ja pitää ne piilossa Global Address List (GAL) -luettelosta, jotta nämä pääosastot eivät näy organisaatiossa käyttäjille. Kun kaikki on tarkistettu, teet sen näkyväksi käyttäjille viimeisessä vaiheessa.
LisäämmeC-etuliite jokaiselle luomallemme jakeluryhmälle. Näin voimme helposti tunnistaa ryhmät tai lajitella ne tarvittaessa. TheCtarkoittaaPilvi.
Lataa Import-DGs.ps1 PowerShell-komentosarja ja aseta seC: scriptskansio.
# 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
}
}
}Suorita PowerShell järjestelmänvalvojana ja muodosta yhteys Exchange Online PowerShelliin.
Connect-ExchangeOnlineSuorita komentosarja Exchange Online PowerShellissä luodaksesi pääosastot CSV-tiedostostaC-etuliite Exchange Onlinessa – Microsoft 365.
C:Scripts.Import-DGs.ps1Kirjaudu sisäänExchangen hallintakeskus. Varmista, ettäC-Jakeluryhmät on luotu onnistuneestiJakeluluetteloja sisäänSähköpostia tukeva suojaus.

Napsauta aDGja valitseKenraali. Varmista, että arvot on asetettu onnistuneesti.

Napsautajäsenetja varmista, että pääosaston omistajat on lisätty onnistuneesti.

NapsautaAsetuksetja varmista, että Piilota tämä ryhmä yleisestä osoiteluettelosta -arvo on käytössä.

Vaihe 4. Lisää jäseniä jakeluryhmiin
Lataa Add-MembersDGs.ps1 PowerShell-komentosarja ja aseta seC: scriptskansio.
# 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
}
}
}Suorita komentosarja Exchange Online PowerShellissä lisätäksesi jäsenet CSV-tiedostosta pääosastoihin etuliitteelläC-Exchange Onlinessa – Microsoft 365.
C:Scripts.Add-MembersDGs.ps1Napsauta pääosastoa ja napsautajäsenet. Varmista, että jäsenet näkyvätC-Jakeluryhmä.

Vaihe 5. Siirrä pääosastot erottamaan organisaatioyksiköt
Voit ohittaa tämän vaiheen, jos sinulla ei ole Exchange Hybrid -ympäristöä. Mutta todennäköisimmin sinulla on Microsoft Entra Connect Sync käynnissä ja synkronointi paikallisen ja Microsoft 365:n välillä.
Jos jakeluryhmät ovat eri organisaatioyksiköissä, siirrä ne kaikki uuteen organisaatioyksikköön alla olevan komentosarjan avulla. Tämä helpottaa hallintaa, kun poistat OU:n synkronoinnin Microsoft Entra ID:n kanssa käytöstä seuraavassa vaiheessa.
Muuttaarivi 6organisaatioon, johon haluat siirtää myös pääosastot.
Lataa Move-DGs.ps1 PowerShell-komentosarja ja aseta seC: scriptskansio.
# 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
}Suorita komentosarja PowerShellissä (on-premises) siirtääksesi pääosastot kohteeseenDGOrganisaatioyksikkö Active Directoryssa.
C:Scripts.Move-DGs.ps1Kun se on valmis, avaaActive Directory -käyttäjät ja -tietokoneetja varmistaa, että pääosastot näkyvät organisaatioyksikössäDG.

Vaihe 6. Poista paikallisten jakeluryhmien synkronointi
Kirjaudu sisään Microsoft Entra Connect Sync -palvelimeen. Aloita seuraavaksiAzure AD Connecttyökalu.
Poista valintaDGOrganisaatioyksikkö (OU) kaikkien jakeluryhmien kanssa, jotta sitä ei enää synkronoida Microsoft 365:een.

Jos siirrät pääosastot organisaatioyksikköön, jonka synkronointi Microsoft 365:een on jo poistettu, sinun on pakotettava synkronointi Microsoft Entra Connect tai odotettava enintään 30 minuuttia, ennen kuin synkronointi suoritetaan automaattisesti.
Start-ADSyncSyncCycle -PolicyType DeltaOdota kymmenen minuuttia ja tarkista, eivätkö kaikki alkuperäiset paikalliset jakeluryhmät enää näy Microsoft 365:ssä. Vain pilvipalvelun jakeluryhmät tulevat näkyviin. Tämä on erittäin tärkeää ennen kuin siirryt seuraavaan vaiheeseen.

Vaihe 7. Viimeistele jakeluryhmät
Voit nyt suorittaa alla olevan skriptin onnistuneesti, mikä poistaaC-etuliite pilven jakeluryhmistä jalisää ensisijainen SMTP-osoite ja kaikki toissijaiset osoitteetpilven jakeluryhmiin. Se asettaa myös CSV-tiedostosta otetun DG:n piilotetun osoiteluettelosta käytössä olevan arvon.
Lataa Finalize-DGs.ps1 PowerShell-komentosarja ja aseta seC: scriptskansio.
# 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
}
}Suorita komentosarja Exchange Online PowerShellissä poistaaksesiC-etuliite kaikista pääosastoista ja tuo kaikki sähköpostiosoitteet.
C:Scripts.Finalize-DGs.ps1Varmista Exchange-hallintakeskuksessa (Microsoft 365), että kaikki jakeluryhmät näkyvät oikein ilmanC-etuliite.

Tarkista, että sähköpostiosoitteet on lisätty onnistuneesti jakeluryhmään.

Varmista, että Piilota tämä ryhmä yleisestä osoiteluettelosta -arvo on otettu oikein CSV-tiedostosta ja asetettu jakeluryhmään.

Vaihe 8. Testaa postin kulku jakeluryhmiin
Lähetä sähköpostit muutamalle luomillesi jakeluryhmälle ja varmista, että sähköposti on toimitettu onnistuneesti ryhmän vastaanottajille.
siinä se!
Johtopäätös
Opit siirtämään jakeluryhmiä Microsoft 365:een. Ainoa tapa tehdä tämä on luoda ne uudelleen manuaalisesti Microsoft 365 -hallintakeskuksessa tai PowerShell-komentosarjoilla. Muuta menetelmää ei ole.
Piditkö tästä artikkelista? Saatat myös pitää Microsoft 365 -jakeluryhmän jäsenten viemisestä CSV-muotoon PowerShellin avulla. Älä unohda seurata meitä ja jakaa tätä artikkelia.















