为什么以下内容不会迭代System.object[]
返回的ConvertFrom-Json
数组的元素:
ConvertFrom-Json '[1, 2, 3]' | ForEach-Object {": $_"}
但这样做:
(ConvertFrom-Json '[1, 2, 3]') | ForEach-Object {": $_"}
在我看来,在第一种情况下,整个数组作为参数传递给ForEach
,但原因并不清楚。
答案 0 :(得分:1)
从我的回答中复制here:
ConvertFrom-Json
管道有一些奇怪的行为。问题是ConvertFrom-Json
将JSON数组包装在一个数组中,然后将整个数组作为一个项传递给管道。在大多数情况下这很好,但如果最外层是JSON数组,则整个数组作为单个对象传递到管道中。
比较:
PS> ConvertFrom-Json '[1, 2, 3]' | ForEach-Object {": $_"}
: 1 2 3
PS> (ConvertFrom-Json '[1, 2, 3]') | ForEach-Object {": $_"}
: 1
: 2
: 3
PS> $x = ConvertFrom-Json '[1, 2, 3]'
PS> $x | ForEach-Object {": $_"}
: 1
: 2
: 3
PS> ,$x | ForEach-Object {": $_"}
: 1 2 3
请注意,最后一个示例我们可以使用一元逗号运算符复制问题。
PowerShell Core 6已报告此问题here。