ค้นหาเว็บไซต์

วิธีสร้างกลุ่มการแจกจ่ายแบบไดนามิกโดยใช้ที่อยู่อีเมล


ตัวกรองผู้รับทำให้สิ่งนี้เป็นเรื่องง่าย - หรือทำ

การอภิปรายในชุมชนเทคโนโลยีของ 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 $Filter

Get-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 ให้รายละเอียดว่าเกิดอะไรขึ้นกับคุณสมบัติกรองได้สี่คุณสมบัติที่ฉันทดสอบ

PropertyEq OperatorLike OperatorFilter works in DDL
EmailAddressesCan create DDLFailsNo
PrimarySMTPAddressFailsFailsN/A
UserPrincipalNameCan create DDLFailsNo
WindowsLiveIDWorksFailsYes

โดยสรุป คุณสมบัติ 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 ทำงานได้อย่างถูกต้อง เราก็ได้แต่หวัง

บทความที่เกี่ยวข้อง