首页 > 解决方案 > 从 Powershell 中的 PSCustomObject 检索元素

问题描述

我是 Powershell 新手,目前正面临这个问题。

我在 Powershell 中调用了一个 REST API,它将 API 响应存储在 $GetResponse 变量中。特此一些显示语句:- Write-Host $Getresponse.GetType() 输出:- System.Management.Automation.PSCustomObject

Write-Host $Getresponse.registered_models.name 输出:- 测试 test1

Write-Host $Getresponse | Get-Member -Force 输出:- @{registered_models=System.Object[]}

我想将 $Getresponse 的输出存储到一个数组变量中,但想不出办法。

标签: powershell

解决方案


笔记:

  • Write-Host通常是错误的工具,除非其意图是仅写入显示器,绕过成功输出流,并且能够将输出发送到其他命令,将其捕获到变量中,或将其重定向到文件。要输出一个值,请单独使用;例如,$value代替Write-Host $value(或使用Write-Output $value,尽管很少需要);看到这个答案

  • 还要注意Write-Host,因为它使用简单.ToString()的字符串化而不是 PowerShell 丰富的输出格式化系统,通常会产生对复杂对象无用的表示;要仅在仍然获得丰富的输出格式的同时输出到显示器,请改为通过管道传输到Out-Hostcmdlet。

  • 即使是丰富的默认输出格式也不足以用于深度嵌套,例如Invoke-RestMethod从 REST 服务接收的 JSON 响应(自动,由 )构造的对象图。为了快速可视化此类对象图的结构,您可以通过管道将它们转换回 JSON ConvertTo-Json- 确保指定一个足够-Depth的 ,原因在这篇文章中解释。


根据您在评论中发布的格式化输出示例,您正在寻找.name可以通过成员枚举获得的嵌套属性值。

[array] $names = $Getresponse.registered_models.name

推荐阅读