PowerShell读取JSON数据时报Get-Member无对象错误如何解决
报错原因
- 核心错误来自
Write-Host的特性:Write-Host仅会将输入内容转换为纯字符串输出到控制台,不会将原对象传递到管道下游。你控制台输出的第一行@{odata.metadata=http://myApp/View/odata/$metadata#PeopleDepartmentOData; value=System.Object[]}就是Write-Host将对象转成格式化字符串打印的结果,打印完之后没有任何对象流入后续的Get-Member,因此Get-Member接收不到任何输入对象,触发报错。 - 额外补充:你解析后得到的
$thePeople是包含两个顶层属性的结构体,实际人员列表数据存储在value属性对应的数组中,后续遍历操作也需要访问该属性才能拿到目标数据。
解决方法
- 如果你要查看
$thePeople的对象结构,直接删除Write-Host即可:
# 查看顶层对象的成员 $thePeople | Get-Member # 查看人员列表的成员结构 $thePeople.value | Get-Member
- 遍历人员数据的示例代码:
foreach ($person in $thePeople.value) { Write-Host "$($person.FirstName) $($person.LastName) 职位:$($person.JobTitle) 部门:$($person.Department)" }
补充说明
PowerShell中Write-Host的定位就是仅做控制台展示用,不会参与管道数据传递。如果需要既输出内容到控制台又保留对象传递能力,可以使用Write-Output,或者直接省略输出命令——PowerShell默认会将未被捕获的变量值输出到管道。
内容的提问来源于stack exchange,提问作者Pete Whelan
相关产品推荐
相关产品推荐

