Kaip perkelti platinimo grupes į „Microsoft 365“.

Visos pašto dėžutės perkeliamos į „Exchange Online“. Tačiau platinimo grupės vis dar yra vietinės, todėl norime jas perkelti į „Microsoft 365“, kad galėtume jas valdyti tiesiogiai „Exchange Online“. Šiame straipsnyje sužinosite, kaip perkelti platinimo grupes į Microsoft 365.

Perkelkite vietines platinimo grupes į „Microsoft 365“.

Kai visos pašto dėžutės perkeliamos į „Exchange Online“ sistemoje „Microsoft 365“, norite tvarkyti paskirstymo grupes debesyje.

„Exchange on-premises“ arba „Exchange Online“ nėra galimybės perkelti vietines paskirstymo grupes į „Exchange Online“. Vienintelis būdas tai padaryti – iš naujo sukurti DG rankiniu būdu arba automatizuoti naudojant PowerShell.

Jei turite tik keletą generalinių direktoratų, geras būdas yra rankiniu būdu. Tačiau jei turite daug generalinių direktoratų, tai užtruks daug laiko, o geriausias pasirinkimas yra naudoti „PowerShell“.

Svarbu:Atlikite šiuos veiksmus tik tada, kai turite visas pašto dėžutes Microsoft 365 ir daugiau pašto dėžučių Exchange on-premises. Jei „Exchange Hybrid“ aplinkoje turite vietinių pašto dėžučių, turėtumėte sukurti paskirstymo grupes vietoje.

1 veiksmas. Eksportuokite vietines paskirstymo grupes

Pirmas žingsnis yra eksportuoti visas platinimo grupes į CSV failą.

PowerShell scenarijus eksportuos šiuos DG grupių tipus:

SUSIJĘS:Išjungti „Microsoft 365“ grupių pasveikinimo pranešimą

  • Paskirstymo grupė
  • Apsaugos grupė
  • Kambarių sąrašas (jį gausite tik naudodami „PowerShell“)

Štai kaip generaliniai direktoratai atrodo vietiniame Exchange administravimo centre. Vėlgi, kambarių sąrašas čia nerodomas.

Atsisiųskite Export-DGs.ps1 PowerShell scenarijų ir įdėkite jįC: scenarijaiaplanką. Scenarijus eksportuos CSV failą įC: tempaplanką. Jei neturite aTempaplanką, sukurkite vieną.

# 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 ";"

Paleiskite scenarijų „Exchange Management Shell“, kad eksportuotumėte visus vietinius DG į CSV failą.

C:Scripts.Export-DGs.ps1

2 veiksmas. Redaguokite vietinių platinimo grupių CSV failą

Atidarykite CSV failąDGs.csvinC: temp.

Ši dalis yra labai svarbi, nes CSV failas yra tai, ką scenarijus atliks kitais veiksmais. Taigi, jei nenustatėte visų teisingų savybių verčių, gausite klaidų.

Taigi neskubėkite ir užpildykite viską teisingai. Įsitikinkite, kad yra CSV failasC: tempir turi vardąDGs.csv

Štai pavyzdys, kodėl importuojant GD gali atsirasti klaida:

Administratorius gali būti grupės savininkas, o jei neturite „Microsoft 365“ paskyros tokiu pavadinimu, ji nepridės jos kaip savininko. Taigi kiekvienos platinimo grupės CSV faile turėtumėte pridėti vartotoją kaip savininką. Tarkime, kad platinimo grupė priklauso administratoriui. Tuose laukuose įveskite „Microsoft 365“ administratoriaus vardą.

Grupės savininką galite palikti tuščią, bet kitame veiksme pamatysite klaidą, kai jis importuos DG ir kaip numatytąją nustatys administratoriaus paskyrą, kurioje vykdomas scenarijus.

3 veiksmas. Importuokite paskirstymo grupes į „Microsoft 365“.

Vienintelis būdas sukurti platinimo grupes ir išlaikyti originalias platinimo grupes – pridėti kitokį grupių pavadinimą. Tai pakeisime vėliau.

Svarbu sukurti paskirstymo grupes ir paslėpti jas nuo visuotinio adresų sąrašo (GAL), kad naudotojai organizacijoje nepasirodytų šie GD. Kai viskas bus patikrinta, paskutiniame veiksme tai padarysite matomą vartotojams.

Mes pridėsimeC-kiekvienos mūsų kuriamos platinimo grupės prefiksas. Tokiu būdu galime nesunkiai identifikuoti grupes arba prireikus jas surūšiuoti. TheCreiškiaDebesis.

Atsisiųskite Import-DGs.ps1 PowerShell scenarijų ir įdėkite jįC: scenarijaiaplanką.

# 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
        }
    }
}

Paleiskite „PowerShell“ kaip administratorių ir prisijunkite prie „Exchange Online PowerShell“.

Connect-ExchangeOnline

Paleiskite scenarijų „Exchange Online PowerShell“, kad sukurtumėte DG iš CSV failo suC-prefiksas „Exchange Online“ – „Microsoft 365“.

C:Scripts.Import-DGs.ps1

Prisijunkite prieExchange administravimo centras. Patikrinkite, arC-Paskirstymo grupės sėkmingai sukurtosPlatinimo sąrašasir vidujePašto apsauga.

Spustelėkite aDGir pasirinkiteGenerolas. Patikrinkite, ar sėkmingai nustatytos reikšmės.

Spustelėkitenariaiir patikrinkite, ar GD savininkai sėkmingai įtraukti.

SpustelėkiteNustatymaiir patikrinkite, ar įjungta reikšmė Slėpti šią grupę iš visuotinio adresų sąrašo.

4 veiksmas. Pridėkite narius į platinimo grupes

Atsisiųskite „Add-MembersDGs.ps1 PowerShell“ scenarijų ir įdėkite jįC: scenarijaiaplanką.

# 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
        }
    }
}

Paleiskite scenarijų „Exchange Online PowerShell“, kad pridėtumėte narius iš CSV failo prie DG su priešdėliuC-„Exchange Online“ – „Microsoft 365“.

C:Scripts.Add-MembersDGs.ps1

Spustelėkite DG ir spustelėkitenariai. Patikrinkite, ar nariai rodomiC-Platinimo grupė.

5 veiksmas. Perkelkite generalinius direktoratus į atskirą OU

Galite praleisti šį veiksmą, jei neturite „Exchange Hybrid“ aplinkos. Tačiau greičiausiai veikia „Microsoft Entra Connect Sync“ ir sinchronizuojama tarp vietinės ir „Microsoft 365“.

Jei platinimo grupės yra skirtingose ​​OU, perkelkite jas į naują OU naudodami toliau pateiktą scenarijų. Taip bus lengviau valdyti, kai kitame veiksme išjungsite OU sinchronizavimą su Microsoft Entra ID.

Keisti6 eilutėį OU, kur norite perkelti ir generalinius direktoratus.

Atsisiųskite Move-DGs.ps1 PowerShell scenarijų ir įdėkite jįC: scenarijaiaplanką.

# 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
}

Paleiskite scenarijų PowerShell (on-premises), kad perkeltumėte generalinius direktoratus įDGOrganizacinis padalinys Active Directory.

C:Scripts.Move-DGs.ps1

Kai tai bus padaryta, atidarykite„Active Directory“ vartotojai ir kompiuteriaiir patikrinkite, ar generaliniai direktoratai yra OUDG.

6 veiksmas. Pašalinkite vietinių platinimo grupių sinchronizavimą

Prisijunkite prie Microsoft Entra Connect Sync serverio. Toliau pradėkiteAzure AD Connectįrankis.

Panaikinkite žymėjimąDGOrganizacinis vienetas (OU) su visomis platinimo grupėmis, kad jis nebebus sinchronizuojamas su „Microsoft 365“.

Jei perkeliate GD į OU, kurios sinchronizavimas su „Microsoft 365“ jau nepažymėtas, turite priverstinai sinchronizuoti „Microsoft Entra Connect“ arba palaukti daugiausia 30 minučių, kol sinchronizavimas bus paleistas automatiškai.

Start-ADSyncSyncCycle -PolicyType Delta

Palaukite dešimt minučių ir patikrinkite, ar visos pradinės vietinės platinimo grupės neberodomos „Microsoft 365“. Bus rodomos tik debesies paskirstymo grupės. Tai labai svarbu prieš pereinant prie kito žingsnio.

7 veiksmas. Užbaikite paskirstymo grupes

Dabar galite sėkmingai paleisti toliau pateiktą scenarijų, kuris pašalinsC-priešdėlis iš debesies platinimo grupių irpridėkite pirminį SMTP adresą ir visus antrinius adresusį debesies paskirstymo grupes. Ji taip pat nustatys paslėptą iš adresų sąrašo įjungtą reikšmę DG, paimtą iš CSV failo.

Atsisiųskite Finalize-DGs.ps1 PowerShell scenarijų ir įdėkite jįC: scenarijaiaplanką.

# 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
    }
}

Paleiskite scenarijų „Exchange Online PowerShell“, kad pašalintumėteC-priešdėlį iš visų generalinių direktoratų ir importuoti visus el. pašto adresus.

C:Scripts.Finalize-DGs.ps1

„Exchange“ administravimo centre („Microsoft 365“) patikrinkite, ar visos platinimo grupės rodomos teisingai beC-priešdėlis.

Patikrinkite, ar el. pašto adresai sėkmingai įtraukti į platinimo grupę.

Patikrinkite, ar reikšmė Slėpti šią grupę visuotiniame adresų sąraše yra teisingai paimta iš CSV failo ir nustatyta paskirstymo grupėje.

8 veiksmas. Išbandykite pašto srautą į paskirstymo grupes

Siųskite el. laiškus kelioms savo sukurtoms platinimo grupėms ir patikrinkite, ar el. laiškas sėkmingai pristatytas grupės gavėjams.

tai viskas!

Išvada

Sužinojote, kaip perkelti platinimo grupes į „Microsoft 365“. Vienintelis būdas tai padaryti – iš naujo jas sukurti rankiniu būdu „Microsoft 365“ administravimo centre arba naudojant „PowerShell“ scenarijus. Kito metodo nėra.

Ar jums patiko šis straipsnis? Jums taip pat gali patikti eksportuoti Microsoft 365 platinimo grupės narius į CSV su PowerShell. Nepamirškite sekti mūsų ir pasidalinti šiuo straipsniu.

Related Posts