管道的工作方式不同

Pipeline works differently

我有点卡住了。为什么这个管道 returns 没什么

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

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

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

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

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

问题

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

Returns 没什么,因为在旧版本的 ConvertFrom-Json 中通过管道发送数组(作为单个项目)而不是单独的项目:

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

作为解决方法,您可以简单地 unroll the pipeline items using Write-Output:

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

FullName
--------
a

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