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

PowerShell 5.1中ConvertFrom-Json如何不关闭管道输出单个数组成员

问题根源说明

PowerShell 5.1 中 ConvertFrom-Json 的固有设计就是将 JSON 解析得到的完整数组作为单个对象向下传递,不会自动枚举数组内的成员逐个传入管道,这就是你直接接 Where-Object、Select-Object 时命令操作对象是整个数组、不符合预期的原因,该行为在 PowerShell 7+ 版本中已经调整为默认枚举数组成员,但 5.1 环境下需要手动处理。

最优管道式解决方案

无需将命令包裹进括号、完全保留管道写法的方案非常简单,只需要在 ConvertFrom-Json 后追加一节 ForEach-Object { $_ } 即可,该命令会自动枚举输入的数组对象,将数组成员逐个向下游管道传递,完全贴合你想要的 <# objects #> | Where-Object { <# test #> } 写法习惯。如果追求写法简洁,也可以替换为PowerShell通用别名写法 % { $_ },效果完全一致。

修改后的示例二代码如下:

& '.\Stack Overflow Demo 03.ps1' | ConvertTo-JSON | ConvertFrom-Json | ForEach-Object { $_ } | Select-Object -First 1

执行后输出效果和加括号的示例一完全一致,只会返回第一条匹配结果,后续接 Where-Object 做筛选也会按照预期针对单对象判断。

方案优势

  • 完全遵循管道流式书写逻辑,不需要中断管道加外层括号
  • 写法符合 PowerShell 通用使用规范,客户接受度高
  • 无额外性能损耗,和括号包裹的执行效率基本一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:54:02