Dağıtım Gruplarını Microsoft 365'e Taşıma
Tüm posta kutuları Exchange Online'a taşınır. Ancak Dağıtım Grupları hala şirket içindedir ve onları doğrudan Exchange Online'da yönetmek için Microsoft 365'e taşımayı tercih ederiz. Bu makalede Dağıtım Gruplarını Microsoft 365'e nasıl geçireceğinizi öğreneceksiniz.
Şirket içi Dağıtım Gruplarını Microsoft 365'e geçirme
Tüm posta kutuları Microsoft 365'teki Exchange Online'a geçirildiğinde buluttaki dağıtım gruplarını yönetmek istersiniz.
Şirket içi Exchange'de veya Exchange Online'da şirket içi Dağıtım Gruplarını Exchange Online'a geçirme seçeneği yoktur. Bunu yapmanın tek yolu DG'leri manuel olarak yeniden oluşturmak veya PowerShell ile otomatikleştirmektir.
Yalnızca birkaç DG'niz varsa, manuel olarak yapmak iyi bir yaklaşımdır. Ancak çok sayıda DG'niz varsa, zamanınızın çoğunu alacaktır ve en iyi seçenek PowerShell'i kullanmaktır.
Önemli: Bu adımları yalnızca tüm posta kutularınız Microsoft 365'te olduğunda ve şirket içi Exchange'de başka posta kutusu kalmadığında izleyin. Exchange Hibrit ortamında şirket içinde posta kutularınız olduğu sürece şirket içinde dağıtım grupları oluşturmalısınız.
1. Adım. Şirket içi Dağıtım Gruplarını dışarı aktarın
İlk adım, tüm Dağıtım Gruplarını bir CSV dosyasına aktarmaktır.
PowerShell betiği aşağıdaki DG grubu türlerini dışa aktaracaktır:
- Dağıtım grubu
- Güvenlik grubu
- Oda listesi (bunu yalnızca PowerShell kullanarak elde edersiniz)
DG'lerin şirket içi Exchange yönetim merkezinde nasıl göründüğü aşağıda açıklanmıştır. Yine oda listesi burada görünmüyor.
Export-DGs.ps1 PowerShell komut dosyasını indirin ve C:\scripts klasörüne yerleştirin. Komut dosyası, CSV dosyasını C:\temp klasörüne aktaracaktır. Temp klasörünüz yoksa bir tane oluşturun.
# V1.0
# Export-DGs.ps1
# https://www.alitajran.com/migrate-distribution-groups-to-microsoft-365/
# CSV file export path
$Csvfile = "C:\temp\DGs.csv"
# Get all distribution groups
$Groups = Get-DistributionGroup -ResultSize Unlimited
# Count the total number of distribution groups
$totalGroups = $Groups.Count
$currentGroupIndex = 0
# Initialize an empty array for output
$Output = @()
# Loop through distribution groups
foreach ($Group in $Groups) {
$currentGroupIndex++
$GroupDN = $Group.DistinguishedName
# 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
$Output += [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 = ($Group.ManagedBy.Name -join ',')
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
}
}
# Clear progress bar
Write-Progress -Activity "Processing Distribution Groups" -Completed
# Sort the output by DisplayName and export to CSV file
$Output | Sort-Object DisplayName | Export-CSV -Path $Csvfile -NoTypeInformation -Encoding UTF8 #-Delimiter ";"Tüm şirket içi DG'leri CSV dosyasına aktarmak için betiği Exchange Yönetim Kabuğu'nda çalıştırın.
C:\Scripts\.\Export-DGs.ps12. Adım. Şirket içi Dağıtım Grupları CSV dosyasını düzenleyin
DGs.csv CSV dosyasını C:\temp konumunda açın.
Bu kısım son derece önemlidir çünkü CSV dosyası, sonraki adımlarda betiğin geçeceği dosyadır. Dolayısıyla, özellikler için tüm değerleri doğru ayarlamadıysanız hatalar alırsınız.
Bu yüzden acele etmeyin ve her şeyi doğru şekilde doldurun. CSV dosyasının C:\temp konumunda olduğundan ve DGs.csv adına sahip olduğundan emin olun.
DG'leri içe aktardığınızda neden bir hatanın görünebileceğine dair bir örnek aşağıda verilmiştir:
Yönetici grubun sahibi olabilir ve bu adda bir Microsoft 365 hesabınız yoksa sahip olarak eklenmez. Bu nedenle, her Dağıtım Grubu için CSV dosyasına sahip olarak bir kullanıcı eklemelisiniz. Dağıtım Grubunun yöneticiye ait olduğunu varsayalım. Bu alanlara Microsoft 365 yönetici adını girin.
Grup sahibini boş bırakabilirsiniz ancak bir sonraki adımda DG'yi içe aktardığında ve betiği çalıştıran yönetici hesabını varsayılan olarak ayarladığında bir hata göreceksiniz.
3. Adım. Microsoft 365'te Dağıtım Gruplarını İçe Aktarın
Dağıtım Gruplarını oluşturmanın ve orijinal Dağıtım Gruplarını korumanın tek yolu gruplara farklı bir ad eklemektir. Bunu daha sonraki bir aşamada değiştireceğiz.
Dağıtım Gruplarını oluşturmak ve bunları Genel Adres Listesinden (GAL) gizli tutmak önemlidir, böylece bu DG'ler kuruluşta kullanıcılar için görünmez. Her şey kontrol edildikten sonra son adımda kullanıcılara görünür hale getireceksiniz.
Oluşturduğumuz her Dağıtım Grubuna C- önekini ekleyeceğiz. Bu sayede grupları kolayca tespit edebilir veya gerekirse sıralayabiliriz. C, Bulut anlamına gelir.
Import-DGs.ps1 PowerShell komut dosyasını indirin ve C:\scripts klasörüne yerleştirin.
# V1.0
# V1.1 - Fixed errors in PowerShell ISE
# Import-DGs.ps1
# https://www.alitajran.com/migrate-distribution-groups-to-microsoft-365/
# Path to the CSV file containing distribution group data
$Csvfile = "C:\temp\DGs.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
}
}
}PowerShell'i yönetici olarak çalıştırın ve Exchange Online PowerShell'e bağlanın.
Connect-ExchangeOnlineExchange Online - Microsoft 365'te C- önekiyle CSV dosyasından DG'ler oluşturmak için betiği Exchange Online PowerShell'de çalıştırın.
C:\Scripts\.\Import-DGs.ps1Exchange yönetim merkezinde oturum açın. C-Dağıtım Gruplarının Dağıtım Listesi'nde ve Posta özellikli güvenlik'te başarıyla oluşturulduğunu doğrulayın.
Bir DG'yi tıklayın ve Genel'i seçin. Değerlerin başarıyla ayarlandığını doğrulayın.
Üyeler'i tıklayın ve DG sahiplerinin başarıyla eklendiğini doğrulayın.
Ayarlar'ı tıklayın ve Bu grubu genel adres listesinde gizle değerinin etkin olduğunu doğrulayın.
4. Adım. Dağıtım Gruplarına üye ekleyin
Add-MembersDGs.ps1 PowerShell betiğini indirin ve C:\scripts klasörüne yerleştirin.
# 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:\temp\DGs.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
}
}
}CSV dosyasındaki üyeleri Exchange Online - Microsoft 365'te C- önekiyle DG'lere eklemek için betiği Exchange Online PowerShell'de çalıştırın.
C:\Scripts\.\Add-MembersDGs.ps1Bir DG'yi tıklayın ve Üyeler'i tıklayın. Üyelerin C-Dağıtım Grubunda göründüğünü doğrulayın.
5. Adım. DG'leri kuruluş birimlerini ayıracak şekilde taşıyın
Exchange Hibrit ortamınız yoksa bu adımı atlayabilirsiniz. Ancak büyük olasılıkla şirket içi ve Microsoft 365 arasında çalışan ve senkronizasyon yapan Microsoft Entra Connect Sync'iniz vardır.
Dağıtım Grupları farklı kuruluş birimlerindeyse aşağıdaki komut dosyasıyla hepsini yeni bir kuruluş birimine taşıyın. Bu, bir sonraki adımda kuruluş biriminin Microsoft Entra ID ile senkronizasyonunu devre dışı bıraktığınızda yönetimi kolaylaştıracaktır.
6. satırı, DG'leri de taşımak istediğiniz kuruluş birimine değiştirin.
Move-DGs.ps1 PowerShell betiğini indirin ve C:\scripts klasörüne yerleştirin.
# 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
}DG'leri Active Directory'deki DG Kuruluş Birimi'ne taşımak için betiği PowerShell'de (şirket içi) çalıştırın.
C:\Scripts\.\Move-DGs.ps1İşlem tamamlandıktan sonra Active Directory Kullanıcıları ve Bilgisayarları'nı açın ve DG'lerin kuruluş birimi DG'de göründüğünü doğrulayın.
6. Adım. Şirket içi Dağıtım Gruplarının senkronizasyonunu kaldırın
Microsoft Entra Connect Sync sunucusunda oturum açın. Daha sonra Azure AD Connect aracını başlatın.
Artık Microsoft 365 ile senkronize edilmemesi için tüm Dağıtım Gruplarıyla birlikte DG Organizasyon Biriminin (OU) işaretini kaldırın.
DG'leri Microsoft 365'e eşitleme konusunda zaten işaretlenmemiş bir kuruluş birimine taşırsanız Microsoft Entra Connect'i zorla eşitlemeniz veya eşitlemenin otomatik olarak çalıştırılmasından önce en fazla 30 dakika beklemeniz gerekir.
Start-ADSyncSyncCycle -PolicyType DeltaOn dakika bekleyin ve tüm orijinal şirket içi Dağıtım Gruplarının artık Microsoft 365'te görünüp görünmediğini kontrol edin. Yalnızca bulut Dağıtım Grupları görünecektir. Bir sonraki adıma geçmeden önce bu çok önemlidir.
Adım 7. Dağıtım Gruplarını Sonlandırın
Artık C- önekini bulut Dağıtım Gruplarından kaldıracak ve birincil SMTP adresini ve tüm ikincil adresleri bulut Dağıtımına ekleyecek olan aşağıdaki komut dosyasını başarıyla çalıştırabilirsiniz. Gruplar. Ayrıca CSV dosyasından alınan DG'de etkin adres listesinde gizlenen değerini de ayarlayacaktır.
Finalize-DGs.ps1 PowerShell betiğini indirin ve C:\scripts klasörüne yerleştirin.
# 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:\temp\DGs.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
}
}C- önekini tüm DG'lerden kaldırmak ve tüm e-posta adreslerini içe aktarmak için betiği Exchange Online PowerShell'de çalıştırın.
C:\Scripts\.\Finalize-DGs.ps1Exchange yönetim merkezinde (Microsoft 365) tüm Dağıtım Gruplarının C- öneki olmadan doğru şekilde göründüğünü doğrulayın.
E-posta adreslerinin Dağıtım Grubuna başarıyla eklendiğini kontrol edin.
Bu grubu genel adres listesinde gizle değerinin CSV dosyasından doğru şekilde alındığını ve Dağıtım Grubunda ayarlandığını doğrulayın.
8. Adım. Dağıtım Gruplarına posta akışını test edin
Oluşturduğunuz birkaç Dağıtım Grubuna e-posta gönderin ve e-postanın gruptaki alıcılara başarıyla teslim edildiğini doğrulayın.
İşte bu!
Devamını oku: Kuruluştaki son Exchange Sunucusunu kaldırın »
Çözüm
Dağıtım Gruplarını Microsoft 365'e nasıl geçireceğinizi öğrendiniz. Bunu yapmanın tek yolu, bunları Microsoft 365 yönetim merkezinde manuel olarak veya PowerShell betikleriyle yeniden oluşturmaktır. Başka bir yöntem yok.
Bu makaleyi beğendiniz mi? Ayrıca Microsoft 365 dağıtım grubu üyelerini PowerShell ile CSV'ye aktarma seçeneğini de beğenebilirsiniz. Bizi takip etmeyi ve bu makaleyi paylaşmayı unutmayın.












