如何用Microsoft Graph查询AAD中特定类型会议室用户?遇UnsupportedQuery错误
解决Microsoft Graph查询AAD会议室用户的问题
你遇到的UnsupportedQuery错误,主要是因为同时使用$search和$filter(尤其是endsWith这类函数)的组合在Microsoft Graph中不被支持,而且通过displayName搜索会议室也不够精准——AAD里的会议室是特殊的用户对象,有专门的标识属性可以直接筛选。
正确的查询方式
方式1:通过resourceProvisioningOptions筛选所有会议室
这个属性是数组,只要包含Room值,就代表该用户是会议室对象:
GET https://graph.microsoft.com/v1.0/users?$filter=resourceProvisioningOptions/any(x:x eq 'Room')&$select=id,displayName,mail,roomType&$orderBy=displayName
方式2:按具体会议室类型筛选
如果要区分「会议室(Room)」「预留空间(ReservationResource)」这类细分类型,可以直接用roomType属性过滤:
GET https://graph.microsoft.com/v1.0/users?$filter=roomType eq 'Room' or roomType eq 'ReservationResource'&$select=id,displayName,mail,roomType&$orderBy=displayName
结合邮箱域名过滤
如果需要只保留tenant.com域名的会议室邮箱,修改$filter即可。注意此时需要在请求头里添加ConsistencyLevel: eventual,并带上$count=true(Graph要求使用endsWith等函数时开启一致性级别):
GET https://graph.microsoft.com/v1.0/users?$count=true&$filter=resourceProvisioningOptions/any(x:x eq 'Room') and endsWith(mail,'@tenant.com')&$select=id,displayName,mail&$orderBy=displayName
请求头必须包含:
ConsistencyLevel: eventual
为什么原来的查询报错?
Microsoft Graph对$search和$filter的组合有严格限制,当$filter中使用endsWith这类函数时,无法和$search同时生效,直接触发UnsupportedQuery错误。而且靠displayName搜「room」很容易误匹配普通用户,用专属属性筛选才是更可靠的方案。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

