You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询不属于名称含AVD的特定组的Azure AD用户主体名称

实现方案

你之前的接口调用不符合Microsoft Graph语法规范,memberOf为导航属性,无法直接通过基础筛选语法匹配关联组的名称,且涉及关联实体属性筛选的查询需要启用Azure AD高级查询能力,以下是两种可落地的实现方式:

方法1:单接口查询(中小租户适用)

调用v1.0版本Graph接口,使用lambda表达式做关联属性匹配,必须在请求头中添加ConsistencyLevel: eventual,同时携带$count=true参数触发高级查询能力,接口示例:

GET https://graph.microsoft.com/v1.0/users?$filter=not(memberOf/any(g:contains(g/displayName,'AVD')))&$select=userPrincipalName,displayName,id&$count=true
  • 如果需要排除嵌套组场景下的用户(即用户通过组嵌套间接属于名称含AVD的组也需要排除),将查询语句中的memberOf替换为transitiveMemberOf即可。
  • 该方法在租户用户量超过10万时容易触发限流,大规模租户建议使用方法2。

方法2:分步查询(大规模租户适用,稳定性更高)

  • 第一步拉取所有名称包含"AVD"的组ID:
    GET https://graph.microsoft.com/v1.0/groups?$filter=contains(displayName,'AVD')&$select=id
    
  • 遍历拿到的所有组ID,调用组成员接口获取每个组的全量成员(需要查传递成员就调用transitiveMembers接口),将所有属于AVD相关组的用户ID去重汇总。
  • 拉取租户全量用户列表,和上一步汇总的AVD组用户ID集合做差集,最终得到的就是不属于任何名称含AVD组的用户,直接提取对应userPrincipalName字段即可。

之前调用失败的原因说明

  • https://graph.microsoft.com/v1.0/users/groups?$search="AVD" 路径不合法,users资源下不存在groups子路由
  • https://graph.microsoft.com/v1.0/users?$select=memberOf eq '%AVD%' 语法错误:$select参数仅用于指定返回字段,不能传入筛选表达式,且%通配符不属于Graph OData查询支持的语法,字符串包含匹配需要使用contains()函数
  • https://graph.microsoft.com/beta/users?$expand=memberOf 仅做关联属性展开,未添加任何筛选逻辑,会返回全量用户及所属组数据,且数据量过大时会触发返回结果截断,无法得到预期结果。

内容的提问来源于stack exchange,提问作者AskMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:39:17