管道的工作方式不同
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)版本中得到解决。
我有点卡住了。为什么这个管道 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)版本中得到解决。