Microsoft Entra ID 中群組的動態成員資格規則

您可以建立屬性型規則,以在 Microsoft Entra 標識符中啟用群組的動態成員資格,這是 Microsoft Entra 的一部分。 動態群組成員資格會根據成員屬性自動使用成員資格規則來新增和移除群組成員。 本文詳細說明為使用者或裝置建立動態成員資格規則的屬性和語法。 您可以為安全組或 Microsoft 365 群組上的動態成員資格設定規則。

當使用者或裝置的屬性變更時,系統會評估目錄中的所有動態群組規則,以查看變更是否會觸發任何群組的新增或移除。 如果使用者或裝置滿足群組中的規則,則會將它們新增為該群組的成員。 如果不再滿足規則,則會將使用者移除。 您無法手動新增或移除動態群組的成員。

  • 您可以為裝置或使用者建立動態群組,但無法建立同時包含使用者和裝置的規則。
  • 您無法根據裝置擁有者的使用者屬性建立裝置群組。 裝置成員資格規則只能參考裝置屬性。

注意

此功能需要 Microsoft Entra ID P1 授權或 Intune 教育版,才能讓屬於一或多個動態群組的成員。 您不需要將授權指派給使用者,讓他們成為動態群組的成員,但您必須在 Microsoft Entra 組織中擁有最少的授權數目,才能涵蓋所有這類使用者。 例如,如果您的組織中所有動態群組中總共有1,000個唯一使用者,則需要至少1,000個授權,Microsoft Entra ID P1才能符合授權需求。 動態裝置群組成員的裝置不需要授權。

Azure 入口網站 中的規則產生器

Microsoft Entra ID 提供規則產生器,讓您更快速地建立和更新重要規則。 規則產生器支援最多五個表達式的建構。 規則產生器可讓您更輕鬆地使用一些簡單的運算式來形成規則,不過,它無法用來重現每個規則。 如果規則產生器不支援您想要建立的規則,您可以使用文字框。

以下是一些需要使用文字框的進階規則或語法範例:

  • 具有五個以上表達式的規則
  • 直接報告規則
  • 具有 -contains 或 -notContains 運算符的規則
  • 設定 運算元優先順序
  • 具有複雜表達式的規則;例如 (user.proxyAddresses -any (_ -startsWith "contoso"))

注意

規則產生器可能無法顯示文字框中建構的一些規則。 當規則產生器無法顯示規則時,您可能會看到訊息。 規則產生器不會以任何方式變更動態群組規則的支援語法、驗證或處理。

如需更多逐步指示,請參閱 建立或更新動態群組

Screenshot of the add membership rule for a dynamic group.

單一表達式的規則語法

單一表達式是成員資格規則的最簡單形式,只有上述三個部分。 具有單一表達式的規則看起來類似下列範例: Property Operator Value,其中 屬性的語法是 object.property 的名稱。

下列範例說明使用單一表達式正確建構的成員資格規則:

user.department -eq "Sales"

單一表達式的括弧是選擇性的。 成員資格規則主體的總長度不能超過 3072 個字元。

建構成員資格規則的主體

自動以使用者或裝置填入群組的成員資格規則,是產生 true 或 false 結果的二進位運算式。 簡單規則的三個部分如下:

  • 屬性
  • 運算子

表達式內元件的順序對於避免語法錯誤很重要。

支援的屬性

有三種類型的屬性可用來建構成員資格規則。

  • 布林值
  • DateTime
  • String
  • 字串集合

以下是可用來建立單一表達式的用戶屬性。

布爾值類型的屬性

屬性 允許的值 使用方式
accountEnabled true false user.accountEnabled -eq true
dirSyncEnabled true false user.dirSyncEnabled -eq true

dateTime 類型的屬性

屬性 允許的值 使用方式
employeeHireDate (預覽) 任何 DateTimeOffset 值或關鍵詞 system.now user.employeeHireDate -eq “value”

字串類型的屬性

屬性 允許的值 使用方式
市/鎮 任何字串值或 Null user.city -eq “value”
國家/地區 任何字串值或 Null user.country -eq “value”
companyName 任何字串值或 Null user.companyName -eq “value”
部門 任何字串值或 Null user.department -eq “value”
displayName 任何字串值 user.displayName -eq “value”
employeeId 任何字串值 user.employeeId -eq “value”
user.employeeId -ne null
facsimileTelephoneNumber 任何字串值或 Null user.facsimileTelephoneNumber -eq “value”
givenName 任何字串值或 Null user.givenName -eq “value”
jobTitle 任何字串值或 Null user.jobTitle -eq “value”
郵件 任何字串值或 Null (使用者的 SMTP 位址) user.mail -eq “value”
mailNickName 任何字串值 (使用者的郵件別名) user.mailNickName -eq “value”
memberOf 任何字串值 (有效的群組物件識別碼) user.memberof -any (group.objectId -in ['value'])
行動 任何字串值或 Null user.mobile -eq “value”
objectId 用戶物件的 GUID user.objectId -eq “1111111-1111-1111-1111-1111111111”
onPremisesDistinguishedName 任何字串值或 Null user.onPremisesDistinguishedName -eq “value”
onPremisesSecurityIdentifier 內部部署安全性識別碼 (SID) 適用於從內部部署同步處理至雲端的使用者。 user.onPremisesSecurityIdentifier -eq “S-1-1-11-1111111111-111111111111-11111111111-111111111”
passwordPolicies
DisableStrongPassword
DisablePasswordExpiration
DisablePasswordExpiration、DisableStrongPassword
user.passwordPolicies -eq “DisableStrongPassword”
physicalDeliveryOfficeName 任何字串值或 Null user.physicalDeliveryOfficeName -eq “value”
郵遞區號 任何字串值或 Null user.postalCode -eq “value”
preferredLanguage ISO 639-1 程式代碼 user.preferredLanguage -eq “en-US”
sipProxyAddress 任何字串值或 Null user.sipProxyAddress -eq “value”
state 任何字串值或 Null user.state -eq “value”
streetAddress 任何字串值或 Null user.streetAddress -eq “value”
surname 任何字串值或 Null user.surname -eq “value”
telephoneNumber 任何字串值或 Null user.telephoneNumber -eq “value”
usageLocation 兩個字母國家或地區代碼 user.usageLocation -eq “US”
userPrincipalName 任何字串值 user.userPrincipalName -eq “alias@domain”
userType 成員來賓 Null user.userType -eq “Member”

字串集合類型的屬性

屬性 允許的值 範例
otherMails 任何字串值 user.otherMails -startsWith “alias@domain”
proxyAddresses SMTP:alias@domain smtp: alias@domain user.proxyAddresses -startsWith “SMTP: alias@domain”

如需用於裝置規則的屬性,請參閱 裝置的規則。

支援的表達式運算符

下表列出單一表達式的所有支持運算元及其語法。 運算子可以搭配或不使用連字元 (-) 前置詞。 Contains 運算符會執行部分字串比對,但不會比對集合中的專案。

運算子 語法
不等於 -ne
Equals -eq
Not Starts With -notStartsWith
開頭為 -startsWith
Not Contains -notContains
包含 -包含
不符合 -notMatch
比對 -匹配
In -in
不在 -notIn

使用 -in 和 -notIn 運算符

如果您想要比較使用者屬性的值與多個值,您可以使用 -in 或 -notIn 運算符。 使用括弧符號 “[” 和 “]” 開始和結束值清單。

在下列範例中,如果user.department的值等於清單中的任何值,則表達式會評估為 true:

   user.department -in ["50001","50002","50003","50005","50006","50007","50008","50016","50020","50024","50038","50039","51100"]

使用 -le 和 -ge 運算符

在動態群組規則中使用 employeeHireDate 屬性時,您可以使用小於 (-le) 或大於 (-ge) 運算符。
範例:

user.employeehiredate -ge system.now -plus p1d 

user.employeehiredate -le 2020-06-10T18:13:20Z 

使用 -match 運算符

-match 運算子用於比對任何正則表示式。 範例:

user.displayName -match "^Da.*"   

DaDav評估 David 為 true,aDa 會評估為 false。

user.displayName -match ".*vid"

David 評估為 true, Da 評估為 false。

支援值

運算式中使用的值可以包含數種類型,包括:

  • 字串
  • 布爾值 – true、false
  • 數字
  • 陣列 – 數字陣列、字串數位數組

在表達式內指定值時,請務必使用正確的語法來避免錯誤。 某些語法秘訣如下:

  • 除非值為字串,否則雙引號是選擇性的。
  • 字串和 regex 作業不區分大小寫。
  • 當字串值包含雙引號時,應該使用 ' 字元逸出這兩個引號,例如 user.department -eq '“Sales'” 是當 “Sales” 是值時的適當語法。 單引號應該使用兩個單引號來逸出,而不是每次一個。
  • 您也可以使用 Null 做為值來執行 Null 檢查, 例如 user.department -eq null

使用 Null 值

若要在規則中指定 Null 值,您可以使用 Null 值。

  • 比較 表達式中的 Null 值時,請使用 -eq 或 -ne。
  • 只有當您想要將它解譯為常值字串值時,才使用 null 這個字的引號。
  • -not 運算子不能當做 null 的比較運算符使用。 如果您使用它,則不論您使用 null 還是$null,您都會收到錯誤。

參考 Null 值的正確方式如下:

   user.mail –ne null

具有多個表達式的規則

群組成員資格規則可以由 -and、-or 和 -not 邏輯運算符所連接的多個單一表達式所組成。 邏輯運算子也可以結合使用。

以下是使用多個運算式正確建構成員資格規則的範例:

(user.department -eq "Sales") -or (user.department -eq "Marketing")
(user.department -eq "Sales") -and -not (user.jobTitle -startsWith "SDE")

運算子優先順序

所有運算子會依照優先順序從最高到最低的順序列出。 相同行上的運算元優先順序相等:

-eq -ne -startsWith -notStartsWith -contains -notContains -match –notMatch -in -notIn
-not
-and
-or
-any -all

下列範例說明使用者正在評估兩個表達式的運算符優先順序:

   user.department –eq "Marketing" –and user.country –eq "US"

只有在優先順序不符合您的需求時,才需要括弧。 例如,如果您想要先評估部門,下列顯示括弧如何用來判斷順序:

   user.country –eq "US" –and (user.department –eq "Marketing" –or user.department –eq "Sales")

具有複雜表達式的規則

成員資格規則可以包含複雜的表達式,其中屬性、運算符和值採用更複雜的形式。 當下列任一項成立時,表達式會被視為複雜:

  • 屬性是由值的集合所組成;具體來說,多重值屬性
  • 表達式使用 -any 和 -all 運算符
  • 表達式的值本身可以是一或多個表達式

多重值屬性

多重值屬性是相同類型的物件集合。 它們可用來使用 -any 和 -all 邏輯運算符來建立成員資格規則。

屬性 使用方式
assignedPlans 集合中的每個對象都會公開下列字串屬性:capabilityStatus、service、servicePlanId user.assignedPlans -any (assignedPlan.servicePlanId -eq “efb87545-963c-4e0d-99df-69c6916d9eb0” -and assignedPlan.capabilityStatus -eq “Enabled”)
proxyAddresses SMTP:alias@domain smtp: alias@domain (user.proxyAddresses -any (_ -startsWith “contoso”))

使用 -any 和 -all 運算符

您可以使用 -any 和 -all 運算符,分別將條件套用至集合中的一或所有專案。

  • -any (當集合中至少有一個專案符合條件時滿足)
  • -all (滿足集合中的所有專案符合條件時)

範例 1

assignedPlans 是多值屬性,會列出指派給使用者的所有服務方案。 下列表示式會選取具有 Exchange Online (方案 2) 服務方案 (GUID 值) 且處於 [已啟用] 狀態的使用者:

user.assignedPlans -any (assignedPlan.servicePlanId -eq "efb87545-963c-4e0d-99df-69c6916d9eb0" -and assignedPlan.capabilityStatus -eq "Enabled")

這類規則可用來將已啟用 Microsoft 365 或其他 Microsoft Online Service 功能的所有使用者分組。 然後,您可以使用一組原則套用至群組。

範例 2

下列表達式會選取所有與 Intune 服務相關聯的服務方案的使用者(由服務名稱 “SCO” 識別):

user.assignedPlans -any (assignedPlan.service -eq "SCO" -and assignedPlan.capabilityStatus -eq "Enabled")

範例 3

下列表達式會選取沒有指派服務方案的所有使用者:

user.assignedPlans -all (assignedPlan.servicePlanId -ne null)

使用底線 (_) 語法

底線 (_) 語法會比對其中一個多重值字串集合屬性中的特定值,以將使用者或裝置新增至動態群組。 它與 -any 或 -all 運算子搭配使用。

以下是在規則中使用底線 (_) 來根據 user.proxyAddress 新增成員的範例(它適用於 user.otherMails)。 此規則會將任何 Proxy 位址開頭為 「contoso」 的使用者新增至群組。

(user.proxyAddresses -any (_ -startsWith "contoso"))

其他屬性和一般規則

建立「直接報告」規則

您可以建立包含主管所有直接報告的群組。 當主管的直接報告在未來變更時,會自動調整群組的成員資格。

直接報告規則是使用下列語法建構的:

Direct Reports for "{objectID_of_manager}"

以下是有效規則的範例,其中 “62e19b97-8b3d-4d4a-a106-4ce66896a863” 是管理員的 objectID:

Direct Reports for "62e19b97-8b3d-4d4a-a106-4ce66896a863"

下列秘訣可協助您正確使用規則。

  • 管理員 標識碼 是管理員的物件標識碼。 您可以在管理員的 設定檔中找到它。
  • 若要讓規則能夠運作,請確定 已為組織中的用戶正確設定 Manager 屬性。 您可以在使用者的 設定檔中檢查目前的值。
  • 此規則僅支援管理員的直接報告。 換句話說,您無法使用經理的直接報告 及其 報告來建立群組。
  • 此規則無法與任何其他成員資格規則結合。

建立「所有用戶」規則

您可以使用成員資格規則,建立包含組織內所有使用者的群組。 在未來從組織新增或移除使用者時,會自動調整群組的成員資格。

「所有使用者」規則是使用 -ne 運算元和 Null 值的單一表達式來建構。 此規則會將 B2B 來賓用戶和成員使用者新增至群組。

user.objectId -ne null

如果您想要讓群組排除來賓用戶,並且只包含貴組織的成員,您可以使用下列語法:

(user.objectId -ne null) -and (user.userType -eq "Member")

建立「所有裝置」規則

您可以使用成員資格規則,建立包含組織內所有裝置的群組。 在未來從組織新增或移除裝置時,會自動調整群組的成員資格。

「所有裝置」規則是使用 -ne 運算子的單一表達式和 Null 值來建構:

device.objectId -ne null

延伸模組屬性和自定義延伸模組屬性

動態成員資格規則中支援擴充屬性和自定義延伸模組屬性做為字串屬性。 擴充屬性 可以從內部部署視窗伺服器 Active Directory 同步處理,或使用 Microsoft Graph 更新,並採用 “ExtensionAttributeX” 的格式,其中 X 等於 1 - 15。 動態成員資格規則不支援多重值擴充屬性。 以下是使用擴充屬性做為屬性的規則範例:

(user.extensionAttribute15 -eq "Marketing")

自定義延伸模組屬性 可以從內部部署 Windows Server Active Directory、從連線的 SaaS 應用程式,或使用 Microsoft Graph 建立,且格式 user.extension_[GUID]_[Attribute]為 ,其中:

  • [GUID] 是建立屬性之應用程式的 Microsoft Entra ID 中唯一標識符的移除版本。 它只包含字元 0-9 和 A-Z
  • [Attribute] 是建立屬性時的名稱

使用自訂擴充屬性的規則範例如下:

user.extension_c272a57b722d4eb29bfe327874ae79cb_OfficeNumber -eq "123"

自定義延伸模組屬性也稱為目錄或 Microsoft Entra 延伸模組屬性。

使用 Graph 總管查詢使用者的屬性,並搜尋屬性名稱,即可在目錄中找到自定義屬性名稱。 此外,您現在可以在動態使用者群組規則產生器中選取 [取得自定義延伸模組屬性 ] 連結,以輸入唯一的應用程式標識碼,並接收建立動態成員資格規則時要使用的自定義延伸模組屬性完整清單。 您也可以重新整理此清單,以取得該應用程式的任何新自定義延伸模組屬性。 擴充屬性和自定義延伸模組屬性必須來自租使用者中的應用程式。

如需詳細資訊,請參閱 Microsoft Entra 連線 Sync:目錄延伸模組一文中的動態群組中使用屬性。

裝置的規則

您也可以建立規則,以選取群組中成員資格的裝置物件。 您無法將使用者和裝置同時作為群組成員。

注意

organizationUnit 屬性已不再列出,因此不應使用。 此字串是由 Intune 在特定案例中設定,但 Microsoft Entra ID 無法辨識,因此不會根據此屬性將裝置新增至群組。

注意

systemlabels 是無法使用 Intune 設定的唯讀屬性。

針對 Windows 10,deviceOSVersion 屬性的正確格式如下:(device.deviceOSVersion -startsWith “10.0.1” )。 格式設定可以使用 Get-MgDevice PowerShell Cmdlet 進行驗證:

Get-MgDevice -Search "displayName:YourMachineNameHere" -ConsistencyLevel eventual | Select-Object -ExpandProperty 'OperatingSystemVersion'

您可以使用下列裝置屬性。

裝置屬性 範例
accountEnabled true false device.accountEnabled -eq true
deviceCategory 有效的裝置類別名稱 device.deviceCategory -eq “BYOD”
deviceId 有效的 Microsoft Entra 裝置標識碼 device.deviceId -eq “d4fe7726-5966-431c-b3b8-cddc8fdb717d”
deviceManagementAppId Microsoft Entra ID 中的有效 MDM 應用程式識別碼 device.deviceManagementAppId -eq “0000000a-0000-0000-c000-00000000000000” for Microsoft System Center Configuration Manager 共同管理裝置的 Intune 管理或 “54b943f8-d761-4f8d-951e-9cea1846db5a”
deviceManufacturer 任何字串值 device.deviceManufacturer -eq “Samsung”
deviceModel 任何字串值 device.deviceModel -eq “iPad Air”
displayName 任何字串值 device.displayName -eq “Rob i 電話”
deviceOSType 任何字串值 (device.deviceOSType -eq “iPad”) -or (device.deviceOSType -eq “i 電話”)
device.deviceOSType -startsWith “AndroidEnterprise”
device.deviceOSType -eq “AndroidForWork”
device.deviceOSType -eq “Windows”
deviceOSVersion 任何字串值 device.deviceOSVersion -eq “9.1”
device.deviceOSVersion -startsWith “10.0.1”
deviceOwnership 個人、公司、未知 device.deviceOwnership -eq “Company”
devicePhysicalIds Autopilot 所使用的任何字串值,例如所有 Autopilot 裝置、OrderID 或 PurchaseOrderID device.devicePhysicalIDs -any _ -startsWith “[ZTDId]”
(device.devicePhysicalIds -any _ -eq “[OrderID]:179887111881”
(device.devicePhysicalIds -any _ -eq “[PurchaseOrderId]:76222342342”
deviceTrustType AzureAD、ServerAD、Workplace device.deviceTrustType -eq “AzureAD”
enrollmentProfileName Apple 裝置註冊配置檔名稱、Android Enterprise 公司擁有的專用裝置註冊配置檔名稱或 Windows Autopilot 配置檔名稱 device.enrollmentProfileName -eq “DEP i 電話 s”
extensionAttribute1 任何字串值 device.extensionAttribute1 -eq “some string value”
extensionAttribute2 任何字串值 device.extensionAttribute2 -eq “some string value”
extensionAttribute3 任何字串值 device.extensionAttribute3 -eq “some string value”
extensionAttribute4 任何字串值 device.extensionAttribute4 -eq “some string value”
extensionAttribute5 任何字串值 device.extensionAttribute5 -eq “some string value”
extensionAttribute6 任何字串值 device.extensionAttribute6 -eq “some string value”
extensionAttribute7 任何字串值 device.extensionAttribute7 -eq “some string value”
extensionAttribute8 任何字串值 device.extensionAttribute8 -eq “some string value”
extensionAttribute9 任何字串值 device.extensionAttribute9 -eq “some string value”
extensionAttribute10 任何字串值 device.extensionAttribute10 -eq “some string value”
extensionAttribute11 任何字串值 device.extensionAttribute11 -eq “some string value”
extensionAttribute12 任何字串值 device.extensionAttribute12 -eq “some string value”
extensionAttribute13 任何字串值 device.extensionAttribute13 -eq “some string value”
extensionAttribute14 任何字串值 device.extensionAttribute14 -eq “some string value”
extensionAttribute15 任何字串值 device.extensionAttribute15 -eq “some string value”
isRooted true false device.isRooted -eq true
managementType MDM (適用於行動裝置) device.managementType -eq “MDM”
memberOf 任何字串值 (有效的群組物件識別碼) device.memberof -any (group.objectId -in ['value'])
objectId 有效的 Microsoft Entra 對象識別碼 device.objectId -eq “76ad43c9-32c5-45e8-a272-7b58b58f596d”
profileType Microsoft Entra ID 中的有效配置檔類型 device.profileType -eq “RegisteredDevice”
systemLabels 任何符合 Intune 裝置屬性的字串,用於標記 Modern Workplace 裝置 device.systemLabels -startsWith “M365Managed”

注意

使用 deviceOwnership 建立裝置的動態群組時,您必須將值設定為 Company等於 。 在 Intune 上,裝置擁有權會改為表示為公司。 如需詳細資訊,請參閱 OwnerTypes 以取得詳細數據。 使用 deviceTrustType 建立裝置的動態群組時,您必須將值設定為 AzureAD 等於代表已加入 Microsoft Entra 的裝置、 ServerAD 代表 Microsoft Entra 混合式已加入裝置或 Workplace 代表 Microsoft Entra 已註冊的裝置。 使用 extensionAttribute1-15 來建立裝置的動態群組時,您必須在裝置上設定 的值 extensionAttribute1-15 。 深入瞭解如何在 Microsoft Entra 裝置物件上撰寫extensionAttributes

下一步

這些文章提供 Microsoft Entra ID 中群組的其他資訊。