Beta Graph API deviceRunStates筛选功能失效问题求助
解决Microsoft Graph API筛选特定设备脚本执行结果的问题
问题根源分析
- 第一个API调用失败:你拼接的
${ScriptId}:${DeviceId}并不是deviceManagementScriptDeviceState的合法ID,该ID是Graph自动生成的唯一标识符,并非脚本ID+设备ID的组合,因此直接通过/deviceRunStates/{id}访问会触发路由匹配错误。 - 第二个方法的筛选失效:
userRunStates下级的deviceRunStates集合不支持通过$filter=id eq ...进行服务端筛选,因此会返回所有结果。
正确解决方案
直接针对deviceManagementScripts/{ScriptId}/deviceRunStates集合使用deviceId作为筛选条件,这是官方支持的服务端筛选方式:
$GraphCPU = "https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts/${ScriptId}/deviceRunStates?`$filter=deviceId eq '${DeviceId}'" $ResponseCPU = Invoke-RestMethod -Uri $GraphCPU -Headers $Headers -Method GET # 输出目标设备的执行结果 $ResponseCPU.value | Format-List
补充优化
- 若只需获取
resultMessage等特定字段,可添加$select参数精简返回内容:$GraphCPU = "https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts/${ScriptId}/deviceRunStates?`$filter=deviceId eq '${DeviceId}'&`$select=resultMessage,deviceId,lastStateUpdateDateTime" - 确保你的应用已拥有
DeviceManagementManagedDevices.Read.All或更高权限,避免出现权限不足的错误。
内容的提问来源于stack exchange,提问作者user3519805
相关产品推荐
相关产品推荐

