调用Graph API扩展detectedApps的managedDevices字段无返回数据问题
问题解决:Graph API调用detectedApps时$expand=managedDevices返回空
可能原因及对应解决方案
1. 权限不足导致关联数据无法返回
虽然API调用无报错,但如果你的身份(用户/应用)仅拥有DeviceManagementApps.Read.All权限,缺少DeviceManagementManagedDevices.Read.All权限,会导致无法拉取关联的设备数据。
- 解决:确保已授予这两个权限,应用权限需管理员同意,用户权限需重新登录以生效。
2. Graph API不支持直接通过$expand关联managedDevices
detectedApps与managedDevices是多对多关联,当前Graph API的1.0和beta版本都不支持在查询detectedApps列表时通过$expand直接展开managedDevices。
- 解决:采用反向查询方式:
- 先获取目标应用的detectedApp ID:
GET /deviceManagement/detectedApps?$filter=contains(displayName, '$($appDisplayName)')&$select=id - 用获取到的ID查询关联设备:
GET /deviceManagement/managedDevices?$filter=detectedApps/any(d:d/id eq '{detectedAppId}')&$select=id,deviceName,emailAddress
- 先获取目标应用的detectedApp ID:
3. 验证目标detectedApp是否真有关联设备
先单独查询某个detectedApp的关联设备,确认数据是否存在:
GET /deviceManagement/detectedApps/{detectedAppId}/managedDevices?$select=id,deviceName,emailAddress
如果这个请求也返回空,说明该detectedApp确实没有关联设备,需要检查应用检测配置或设备数据。
脚本速度优化建议
- 多租户场景下,使用并行请求处理不同租户的查询,减少串行等待时间。
- 批量获取detectedApp ID后,利用Graph API的批量请求功能,一次发送多个设备查询,提升效率。
内容的提问来源于stack exchange,提问作者Roel van der Wegen
相关产品推荐
相关产品推荐

