A terjesztési csoportok áttelepítése a Microsoft 365-be

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

2. 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-ExchangeOnline

Futtassa 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.ps1

Jelentkezzen 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.ps1

Kattintson 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.ps1

Ha 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 Delta

Vá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.ps1

Ellenő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.

Related Posts