【问题标题】:Pipeline works differently [duplicate]管道的工作方式不同[重复]
【发布时间】:2021-11-29 09:05:22
【问题描述】:

我有点卡住了。为什么这个管道什么都不返回

Get-Content -Path C:\file.json | ConvertFrom-Json | Where-Object -Property FullName -Like "*somefilter*"

但是当我分成两个管道时,它实际上会返回我想要的 - 由 FullName 过滤的 json 文件(这是一个对象数组)的内容

$t = Get-Content -Path C:\file.json | ConvertFrom-Json
$t | Where-Object -Property FullName -Like "*somefilter*"

【问题讨论】:

标签: powershell powershell-core


【解决方案1】:

这是一个已知问题,在此处描述:#3424 ConvertFrom-Json sends objects converted from a JSON array as an array through the pipeline.Powershell calling Github API: ConvertFrom-Json pipeline mystery

$Json = @'
[
  {
    "FullName": "a"
  },
  {
    "FullName": "b"
  },
  {
    "FullName": "c"
  }
]
'@

问题

$Json |ConvertFrom-Json |Where-Object -Property FullName -Like 'a'

不返回任何内容,因为在旧版本的 ConvertFrom-Json 中通过管道发送一个数组(作为单个项目)而不是单独的项目:

($Json |ConvertFrom-Json).Count # returns 1 (in older versions of PowerShell)

作为一种解决方法,您可以简单地使用 unroll the pipeline items 使用 Write-Output

$Json |ConvertFrom-Json |Write-Output |Where-Object -Property FullName -Like 'a'

FullName
--------
a

该问题已在较新的 PowerShell(核心 7.x)版本中得到解决。

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 2014-05-21
    • 2015-06-28
    • 1970-01-01
    • 2021-06-15
    • 2021-07-07
    • 2016-11-07
    • 2015-10-28
    • 2018-01-01
    相关资源
    最近更新 更多