E-posta Adreslerini Kullanarak Dinamik Dağıtım Grupları Nasıl Oluşturulur
Alıcı Filtreleri Bunu Kolaylaştırır mı, Yoksa Yapar mı?
Microsoft Teknoloji Topluluğu'ndaki bir tartışma, "Filtre olarak belirli bir SMTP etki alanını kullanan bir Dinamik Dağıtım listesi grubu oluşturulabilir mi?" sorusunu sorarken bazı eski temelleri ele aldı. Görünüşte bu, bir makul istek. E-posta adresleri filtrelenebilir özellikler arasında yer aldığından her şeyin hazır olması gerekir. İyi aday gibi görünen özellikler şunlardır:
EpostaAdresleri proxyAdresleri Dize (joker karakterler kabul edilir).
PrimarySmtpAddress geçerli değil Dize (joker karakterler kabul edilir).
UserPrincipalName userPrincipalName Dize (joker karakterler kabul edilir).
WindowsLiveID msExchWindowsLiveID Dize (joker karakterler kabul edilir).
Geçmişte PowerShell aracılığıyla karmaşık alıcı filtreleriyle dinamik dağıtım listeleri oluşturma konusunu ele almıştım. İşin püf noktası, hedef özellikleri kullanarak filtreler oluşturmak, alıcı filtresini doğru alıcı kümesini bulduğundan emin olmak için test etmek ve ardından filtreyi dinamik dağıtım listesine uygulamaktır.
Joker Karakter Karşılaştırmalarıyla İlgili Sorun
Teori, alıcı filtrelerinde e-posta adreslerini kullanmaya çalışana kadar geçerlidir. Buradaki zorluk, belirli bir etki alanına ait e-posta adresleri için posta özellikli nesneler aranırken bu özelliklerin alıcı filtrelerinde öngörülebilir şekilde (veya hiç) çalışmamasıdır. Özelliklerin tümü joker karakterleri desteklediğinden bunun kolay olacağını düşünürdünüz. Bunun gibi bir filtre kullanabilmemiz gerekir:
$Filter = 'PrimarySMTPAddress -like "*office365itpros.com"'Ancak filtre, Get-Recipient cmdlet'i ile EmailAddresses veya PrimarySMTPAddress özellikleri kullanılarak test edildiğinde çalışmaz. Get-Recipient'i kullanmak, bir alıcı filtresinin Exchange Online dizinindeki posta etkin nesneleri çözeceğini ve bulacağını doğrulamanın mükemmel bir yoludur:
Get-Recipient -RecipientPreviewFilter $FilterGet-Recipient, UserPrincipalName özelliğini kullanan bir filtreyle çalışıyor, dolayısıyla bu umut verici görünüyor, Ne yazık ki New-DistributionGroup cmdlet'i bu filtreyi kabul etmeyi reddediyor filtre:
$Filter = 'UserPrincipalName -like "*office365itpros.com"'
New-DynamicDistributionGroup -Name "Office365ITPros users UPN" -DisplayName "People with Office365itpros.com as UPN" -Alias O365.UPN -PrimarySmtpAddress O365.UPN@Office365itpros.com -RecipientFilter $Filter
|Microsoft.Exchange.Configuration.Tasks.ThrowTerminatingErrorException | Wildcards cannot be used as the first character. Please revise the filter criteria.
İşe yarayan şey, özelliği beğen yerine eşit operatörüyle kullanmaktır:
$Filter = 'UserPrincipalName -eq "*office365itpros.com"'
New-DynamicDistributionGroup -Name "Office365ITPros users" -DisplayName "People with Office365itpros.com UPN" -Alias O365.UPN -PrimarySmtpAddress O36.WindowsUPN@Office365itpros.com -RecipientFilter $Filter
New-DynamicDistributionGroup cmdlet'i, WindowsLiveID ve like yerine equal kullanıldığında da çalışır >EmailAddresses özellikleri. Tuhaf bir şekilde, PrimarySMTPAddress için çalışmıyor. Ancak daha sonra, UserPrincipalName veya EmailAddresses özelliklerine dayalı filtrelerle dinamik dağıtım listeleri oluşturmak mümkün olsa da, alıcıları alma zamanı geldiğinde her iki özelliğin de çalışmadığını keşfederiz. Filtreyi dinamik dağıtım listesinden almak ve onu Get-Recipient ile kullanmak işe yaramaz ve liste üyeliğini hesaplamak için kullanılan arka plan görevi de işe yaramaz.
Tablo 1, test ettiğim dört filtrelenebilir özelliğin her birinde ne olduğunu ayrıntılarıyla anlatıyor.
| Property | Eq Operator | Like Operator | Filter works in DDL |
| EmailAddresses | Can create DDL | Fails | No |
| PrimarySMTPAddress | Fails | Fails | N/A |
| UserPrincipalName | Can create DDL | Fails | No |
| WindowsLiveID | Works | Fails | Yes |
Özetle, WindowsLiveID özelliği, dinamik dağıtım listesinin belirli bir etki alanından e-posta adreslerine sahip posta özellikli nesneleri bulmak için alıcı filtresinde kullanabileceği tek özelliktir. Filtre yalnızca kullanmak istediğiniz alan adı bu mülkte depolanıyorsa çalışır. WindowsLiveID'in PrimarySMTPAddress ile aynı değeri tutması gerekmesine rağmen, iki değer farklı olabilir.
Alternatif Bir Yaklaşım
Alıcı filtrelerinde e-posta özelliklerinin kullanılması konusundaki belirsizlik göz önüne alındığında, işe yarayacak bir çözüme yönelmek daha iyi olabilir. Örneğin, alan adını depolamak için posta kutuları ve diğer posta özellikli nesneler için mevcut olan on beş özel özellikten birini kullanmak ve ardından özel özelliği bir alıcı filtresinde kullanmak mümkündür.
Çözüm iki kısımdan oluşuyor. Öncelikle özelliği alan adıyla doldurun (posta kutusunun birincil SMTP adresinden alınır). İkinci olarak, özel öznitelikte depolanan değere göre posta kutularını bulmak için her alan adı için alıcı filtresine sahip dinamik bir dağıtım listesi oluşturun.
Çözüm işe yarasa da dezavantajı, dinamik dağıtım listelerinin üyeliğini sürdürmek için posta kutusu özniteliğini doğru değerlerle doldurmaya yönelik süregelen gereksinimdir. Bu, yeni posta kutularını veya birincil SMTP adreslerindeki değişiklikleri kontrol edebilen ve uygun ayarlamaları yapabilen, zamanlanmış bir Azure Otomasyonu runbook'una çok uygun bir görevdir.
İlk setin oluşturulmasından sonra alan adları için yeni dinamik dağıtım listeleri oluşturmaya gerek kalmamalıdır. Ekstra dinamik dağıtım listeleri yalnızca kuruluşun, kullanıcı posta kutularının birincil SMTP adresleri için kullanılan kümeye yeni etki alanları eklemesi durumunda gereklidir.
Senaryo
Her şeyin beklendiği gibi çalıştığını kanıtlamak için, CustomAttribute13'de depolanan birincil SMTP adresi için etki alanına sahip olmayan posta kutularını tarayacak bir komut dosyası (GitHub'dan indirilebilir) yazdım. Komut dosyası daha sonra alan adresini depolamak için CustomAttribute13'ü günceller.
Daha sonra komut dosyası, her etki alanı için dinamik bir dağıtım listesinin zaten mevcut olup olmadığını görmek için önceden tanımlanmış bir dizi etki alanını kontrol eder. Değilse, komut dosyası CustomAttribute13'de depolanan alan adına sahip posta kutularını bulmak için alıcı filtresine sahip dinamik bir dağıtım listesi oluşturur. Dinamik dağıtım listelerini oluşturan komut dosyasından bir alıntı:
ForEach ($D in $Domains) {
$DDLAlias = ("Domain.{0}" -f $D)
If ($Null -eq (Get-DynamicDistributionGroup -Identity $DDLAlias -ErrorAction SilentlyContinue)) {
Write-Host ("Creating dynamic distribution list for the {0} domain..." -f $D) -ForegroundColor Yellow
$Filter = "CustomAttribute13 -eq '$D' -and RecipientTypeDetails -eq 'UserMailbox'"
$DDLName = ("{0} users" -f $D)
$DDLDisplayName = ("People with {0} primary SMTP addresses" -f $D)
$DDLPrimarySMTPAddress = ("{0}@office365itpros.com" -f $DDLAlias)
$DDLMailTip = ("Use this distribution list to send to all users with a {0} email address" -f $D)
# Create the new dynamic distribution list
$DDL = New-DynamicDistributionGroup -Name $DDLName -DisplayName $DDLDisplayName -Alias $DDLAlias `
-PrimarySmtpAddress $DDLPrimarySMTPAddress -RecipientFilter $Filter
If ($DDL) {
Write-Host ("Dynamic distribution list created for {0}" -f $DDLDisplayName)
# Make sure that the dynamic distribution list has an owner
Set-DynamicDistributionGroup -Identity $DDLAlias `
-ManagedBy $DefaultDDLOwner -MailTip $DDLMailTip
}
} Else {
Write-Host ("A dynamic distribution list already exists for {0} users" -f $D) -ForegroundColor Red
}
}
Çıktı, her etki alanı için dinamik bir dağıtım listesidir. Exchange Online'a alıcı filtresini değerlendirmesi için biraz zaman verdikten sonra, aşağıdaki gibi bir komut çalıştırılarak alıcı grubuna ulaşılabilir:
Get-DynamicDistributionGroupMember -Identity 'Domain.office365itpros.com' | Format-Table DisplayName, PrimarySmtpAddress
DisplayName PrimarySmtpAddress
----------- ------------------
Kim Akers (She/Her) Kim.Akers@office365itpros.com
Ben Owens (DCPG) Ben.Owens@office365itpros.com
Andy Ruth (Project Director) Andy.Ruth@office365itpros.com
James Abrahams James.A.Abrahams@office365itpros.com
Marc Vigneau Marc.Vigneau@office365itpros.com
Komut dosyası çalışır ve posta kutusu özellikleri doğru şekilde korunursa alıcı filtresi doğru sonuçlar üretir. Bir çözümümüz var.
Dinamik Entra ID Gruplarında E-posta Adreslerini Kontrol Etme
Bu arada, Entra ID'nin dinamik grupların e-posta adreslerini kontrol etmesi için bir kuralı desteklediğini belirtmekte fayda var. Bu kural, office365itpros içeren proxy adresine sahip herhangi bir kullanıcı hesabını bulur.
(user.proxyAddresses -any (_ -contains "office365itpros"))Bu, çok değerli bir özelliğe karşı yapılan bir denetimdir ve bunu bir dize özelliğine (bölüm veya ülke gibi) yönelik bir denetimle birleştiremezsiniz. Yine de Microsoft'un alıcı filtrelerini düzgün çalışacak şekilde düzeltmesi iyi olurdu. Ancak umut edebiliriz.