如何通过Graph获取包含来宾成员的Microsoft 365组?
解决通过Microsoft Graph检索包含来宾成员的Microsoft 365组的问题
首先明确:你使用的/beta/groups?$filter=members/any(x:x/userType eq 'Guest')请求报错,是因为Microsoft Graph的groups端点不支持对导航属性members直接进行$filter操作,OData的any/all运算符无法作用于groups资源的members导航属性,这是当前API的限制。
无需客户端筛选的实现方式有两种:
方法1:使用目录对象端点进行筛选
利用directoryObjects端点,它支持对组的members导航属性进行筛选,请求示例如下:
GET /beta/directoryObjects/microsoft.graph.group?$filter=members/any(m:m/userType eq 'Guest')&$select=id,displayName,description,groupTypes
注意事项:
- 需要添加请求头
ConsistencyLevel: eventual,否则会返回筛选不支持的错误 - 所需权限:
Directory.Read.All(应用权限或委派权限)
方法2:通过来宾用户反向关联组
先检索所有来宾用户,同时展开他们所属的组,再对组进行去重:
- 获取所有来宾用户并关联所属组:
GET /beta/users?$filter=userType eq 'Guest'&$select=id,displayName&$expand=memberOf($select=id,displayName,groupTypes)
- 从返回的每个用户的
memberOf集合中提取组信息,通过id去重即可得到包含来宾的所有组。
此方法的优势是权限要求更灵活,仅需User.Read.All和Group.Read.All权限。
如果你使用PowerShell的Microsoft Graph模块,可以用以下命令实现方法2的逻辑(自动去重):
Get-MgUser -Filter "userType eq 'Guest'" -ExpandProperty MemberOf | Select-Object -ExpandProperty MemberOf | Select-Object Id, DisplayName, GroupTypes | Get-Unique -Property Id
内容的提问来源于stack exchange,提问作者Matt Hamilton
相关产品推荐
相关产品推荐

