วิธีสร้างกลุ่มการแจกจ่ายแบบไดนามิกโดยใช้ที่อยู่อีเมล
ตัวกรองผู้รับทำให้สิ่งนี้เป็นเรื่องง่าย - หรือทำ
การอภิปรายในชุมชนเทคโนโลยีของ Microsoft กล่าวถึงประเด็นเก่าๆ เมื่อตั้งคำถาม “สามารถสร้างกลุ่มรายการการแจกจ่ายแบบไดนามิกที่ใช้โดเมน SMTP ที่ระบุเป็นตัวกรองได้หรือไม่” โดยเผินๆ ดูเหมือนว่า คำขอที่สมเหตุสมผล ที่อยู่อีเมลเป็นหนึ่งในชุดคุณสมบัติที่สามารถกรองได้ ดังนั้นเราจึงควรเตรียมพร้อมให้พร้อม คุณสมบัติที่ดูเหมือนผู้สมัครที่ดีคือ:
EmailAddresses proxyAddresses สตริง (ยอมรับไวด์การ์ด)
PrimarySmtpAddress ไม่มี สตริง (ยอมรับไวด์การ์ด)
UserPrincipalName userPrincipalName สตริง (ยอมรับไวลด์การ์ด)
WindowsLiveID msExchWindowsLiveID สตริง (ยอมรับไวด์การ์ด)
ฉันเคยกล่าวถึงหัวข้อการสร้างรายชื่อการแจกจ่ายแบบไดนามิกที่มีตัวกรองผู้รับที่ซับซ้อนผ่าน PowerShell ในอดีต เคล็ดลับคือการสร้างตัวกรองโดยใช้คุณสมบัติเป้าหมาย ทดสอบตัวกรองผู้รับเพื่อให้แน่ใจว่าพบชุดผู้รับที่ถูกต้อง จากนั้นใช้ตัวกรองในรายการการแจกจ่ายแบบไดนามิก
ปัญหาเกี่ยวกับการเปรียบเทียบสัญลักษณ์ตัวแทน
ทฤษฎีนี้ยังคงอยู่จนกว่าคุณจะพยายามใช้ที่อยู่อีเมลในตัวกรองผู้รับ ปัญหาคือคุณสมบัติเหล่านี้ไม่สามารถคาดเดาได้ (หรือเลย) ในตัวกรองผู้รับเมื่อค้นหาออบเจ็กต์ที่เปิดใช้งานเมลสำหรับที่อยู่อีเมลที่เป็นของโดเมนที่ระบุ คุณคงคิดว่ามันจะง่ายเพราะคุณสมบัติทั้งหมดรองรับไวด์การ์ด เราควรจะสามารถใช้ตัวกรองเช่นนี้:
$Filter = 'PrimarySMTPAddress -like "*office365itpros.com"'อย่างไรก็ตาม ตัวกรองจะไม่ทำงานเมื่อทดสอบกับ Get-Recipient cmdlet โดยใช้คุณสมบัติ EmailAddresses หรือ PrimarySMTPAddress การใช้ Get-Recipient เป็นวิธีที่ยอดเยี่ยมในการตรวจสอบว่าตัวกรองผู้รับจะแก้ไขและค้นหาออบเจ็กต์ที่เปิดใช้งานเมลจากไดเรกทอรี Exchange Online:
Get-Recipient -RecipientPreviewFilter $FilterGet-Recipient ทำงานร่วมกับตัวกรองโดยใช้คุณสมบัติ UserPrincipalName ดังนั้นดูเหมือนว่าจะมีความหวัง อนิจจา New-DistributionGroup cmdlet ปฏิเสธที่จะยอมรับ กรอง:
$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.
สิ่งที่ได้ผลคือการใช้คุณสมบัติที่มีตัวดำเนินการ เท่ากับ แทนที่จะใช้ like:
$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 ยังใช้งานได้เมื่อใช้ equal แทนที่จะใช้ like ในตัวกรองเทียบกับ WindowsLiveID และ คุณสมบัติที่อยู่อีเมล น่าแปลกที่มันใช้ไม่ได้กับ PrimarySMTPAddress แต่แล้วเราก็ค้นพบว่าแม้ว่าจะเป็นไปได้ที่จะสร้างรายชื่อการแจกจ่ายแบบไดนามิกด้วยตัวกรองตามคุณสมบัติ UserPrincipalName หรือ EmailAddresses แต่คุณสมบัติทั้งสองจะไม่ทำงานเมื่อถึงเวลาเรียกข้อมูลผู้รับ การดึงตัวกรองจากรายชื่อการแจกจ่ายแบบไดนามิกและใช้กับ รับ-ผู้รับ จะไม่ทำงาน และงานพื้นหลังที่ใช้ในการคำนวณความเป็นสมาชิกของรายการก็เช่นกัน
ตารางที่ 1 ให้รายละเอียดว่าเกิดอะไรขึ้นกับคุณสมบัติกรองได้สี่คุณสมบัติที่ฉันทดสอบ
| 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 |
โดยสรุป คุณสมบัติ WindowsLiveID เป็นคุณสมบัติเดียวที่รายชื่อการแจกจ่ายแบบไดนามิกสามารถใช้ในตัวกรองผู้รับเพื่อค้นหาออบเจ็กต์ที่เปิดใช้งานเมลด้วยที่อยู่อีเมลจากโดเมนที่ระบุ ตัวกรองจะทำงานเฉพาะในกรณีที่โดเมนที่คุณต้องการใช้ถูกจัดเก็บไว้ในพร็อพเพอร์ตี้นั้น แม้ว่า WindowsLiveID ควรเก็บค่าเดียวกันกับ PrimarySMTPAddress แต่ค่าทั้งสองอาจแตกต่างกันได้
แนวทางทางเลือก
เมื่อพิจารณาถึงความไม่แน่นอนเกี่ยวกับการใช้คุณสมบัติอีเมลในตัวกรองผู้รับ การหาโซลูชันที่ใช้งานได้อาจดีกว่า ตัวอย่างเช่น คุณสามารถใช้หนึ่งในสิบห้าแอตทริบิวต์แบบกำหนดเองที่มีให้สำหรับกล่องจดหมายและออบเจ็กต์ที่เปิดใช้งานเมลอื่นๆ เพื่อจัดเก็บชื่อโดเมน จากนั้นใช้แอตทริบิวต์แบบกำหนดเองในตัวกรองผู้รับ
การแก้ปัญหาแบ่งออกเป็นสองส่วน ขั้นแรก เติมแอตทริบิวต์ด้วยชื่อโดเมน (นำมาจากที่อยู่ SMTP หลักของกล่องจดหมาย) ประการที่สอง สร้างรายชื่อการแจกจ่ายแบบไดนามิกสำหรับแต่ละโดเมนด้วยตัวกรองผู้รับเพื่อค้นหากล่องจดหมายตามค่าที่เก็บไว้ในแอตทริบิวต์ที่กำหนดเอง
แม้ว่าโซลูชันจะทำงาน ข้อเสียคือความต้องการอย่างต่อเนื่องในการเติมข้อมูลแอตทริบิวต์กล่องจดหมายด้วยค่าที่ถูกต้องเพื่อรักษาความเป็นสมาชิกของรายชื่อการแจกจ่ายแบบไดนามิก นี่เป็นงานที่เหมาะสมอย่างยิ่งกับสมุดงาน Azure Automation ที่กำหนดเวลาไว้ซึ่งสามารถตรวจสอบกล่องจดหมายใหม่หรือการเปลี่ยนแปลงที่อยู่ SMTP หลัก และทำการปรับเปลี่ยนที่เหมาะสม
ไม่จำเป็นต้องตั้งค่ารายการการแจกจ่ายแบบไดนามิกใหม่สำหรับโดเมนหลังจากการสร้างชุดเริ่มต้น รายชื่อการแจกจ่ายแบบไดนามิกเพิ่มเติมจำเป็นเฉพาะในกรณีที่องค์กรเพิ่มโดเมนใหม่ให้กับชุดที่ใช้สำหรับที่อยู่ SMTP หลักของกล่องจดหมายของผู้ใช้
สคริปต์
เพื่อพิสูจน์ว่าทุกอย่างทำงานได้ตามที่คาดหวัง ฉันจึงเขียนสคริปต์ (ดาวน์โหลดได้จาก GitHub) เพื่อสแกนหากล่องจดหมายที่ไม่มีโดเมนสำหรับที่อยู่ SMTP หลักที่จัดเก็บไว้ใน CustomAttribute13 จากนั้นสคริปต์จะอัปเดต CustomAttribute13 เพื่อจัดเก็บที่อยู่โดเมน
ถัดไป สคริปต์จะตรวจสอบชุดของโดเมนที่กำหนดไว้ล่วงหน้าเพื่อดูว่ามีรายการการแจกจ่ายแบบไดนามิกสำหรับแต่ละโดเมนอยู่แล้วหรือไม่ ถ้าไม่เช่นนั้น สคริปต์จะสร้างรายชื่อการแจกจ่ายแบบไดนามิกพร้อมตัวกรองผู้รับเพื่อค้นหากล่องจดหมายที่มีโดเมนจัดเก็บไว้ใน CustomAttribute13 นี่เป็นสารสกัดจากสคริปต์ที่สร้างรายการการแจกจ่ายแบบไดนามิก:
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
}
}
ผลลัพธ์คือรายการแจกจ่ายแบบไดนามิกสำหรับแต่ละโดเมน หลังจากให้เวลา Exchange Online เพื่อประเมินตัวกรองผู้รับ ชุดของผู้รับจะพร้อมใช้งานโดยการเรียกใช้คำสั่งดังนี้:
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
สคริปต์ใช้งานได้และตัวกรองผู้รับจะสร้างผลลัพธ์ที่แม่นยำหากคุณสมบัติของกล่องจดหมายได้รับการดูแลอย่างถูกต้อง เรามีทางออก
การตรวจสอบที่อยู่อีเมลในกลุ่ม ID Entra แบบไดนามิก
ที่ผ่านมา เป็นที่น่าสังเกตว่า Entra ID รองรับกฎสำหรับกลุ่มไดนามิกเพื่อตรวจสอบกับที่อยู่อีเมล กฎนี้จะค้นหาบัญชีผู้ใช้ใดๆ ที่มีที่อยู่พร็อกซีที่มี office365itpros
(user.proxyAddresses -any (_ -contains "office365itpros"))นี่คือการตรวจสอบกับคุณสมบัติหลายค่า และคุณไม่สามารถรวมกับการตรวจสอบคุณสมบัติสตริง (เช่น แผนกหรือประเทศ) อย่างไรก็ตาม คงจะดีไม่น้อยหากตัวกรองผู้รับคงที่ของ Microsoft ทำงานได้อย่างถูกต้อง เราก็ได้แต่หวัง