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

Invoke-RestMethod与ConvertFrom-JSON解析JSON差异及问题咨询

问题:Invoke-RestMethod解析Graph API响应时Values属性异常的问题

我用PowerShell的Invoke-RestMethod调用Microsoft Graph API的getDeviceInstallStatusReport接口获取设备安装状态报告,执行命令如下:

$GraphAPIReturn = Invoke-RestMethod -Headers @{Authorization = "Bearer $($accesstoken)"} -Uri $GraphAPIResource -Method Post -Body $body -ContentType "application/json"

返回结果中,直接查看$GraphAPIReturn时Values属性显示为预期的原始数据列表,但单独调用$GraphAPIReturn.Values时,返回的却是数组的元数据(如Length、Count、SyncRoot等);而将Edge开发者工具获取的相同JSON响应通过ConvertFrom-JSON解析后,Values属性可正常返回原始数据。

请问Invoke-RestMethod与ConvertFrom-JSON的JSON解析逻辑是否存在差异?若存在,该如何调整方式处理返回对象?若不存在,我的命令哪里出现了问题导致解析异常?

补充信息:

  • 调用URL:https://graph.microsoft.com/beta/deviceManagement/reports/getDeviceInstallStatusReport

解答

解析逻辑差异说明

两者确实存在解析行为差异:
Invoke-RestMethod默认将JSON响应转换为PowerShell自定义对象(PSCustomObject),而PSCustomObject的基类内置了Values成员,用于返回对象所有属性值的集合。当JSON响应中恰好包含同名的Values属性时,直接调用$obj.Values会优先返回这个内置成员,而非JSON里的自定义业务数据。
而ConvertFrom-Json虽然默认也转PSCustomObject,但手动解析复制的JSON字符串时,不会触发内置成员的优先级覆盖问题;若使用-AsHashtable参数,还会直接转为哈希表,彻底避免内置成员冲突。

解决方法

  1. 使用引号包裹属性名访问
    通过引号明确指定要访问的自定义属性,绕过内置成员的优先级:
$GraphAPIReturn.'Values'
  1. 转换为哈希表解析(PowerShell 7+支持)
    调用Invoke-RestMethod时添加-AsHashtable参数,将JSON转为哈希表,哈希表无内置成员冲突问题:
$GraphAPIReturn = Invoke-RestMethod -Headers @{Authorization = "Bearer $($accesstoken)"} -Uri $GraphAPIResource -Method Post -Body $body -ContentType "application/json" -AsHashtable
$GraphAPIReturn.Values  # 可正常获取原始数据
  1. 手动获取原始JSON再解析(PowerShell 5.x兼容)
    先通过Invoke-WebRequest获取原始响应内容,再用ConvertFrom-Json解析:
$responseContent = Invoke-WebRequest -Headers @{Authorization = "Bearer $($accesstoken)"} -Uri $GraphAPIResource -Method Post -Body $body -ContentType "application/json" | Select-Object -ExpandProperty Content
$GraphAPIReturn = $responseContent | ConvertFrom-Json
$GraphAPIReturn.Values  # 正常获取业务数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:52:44