【发布时间】:2023-01-18 04:12:50
【问题描述】:
长期搜索者,第一次张贴者。 :-)
将数组列表传递给 Where-Object 并将其分配回另一个数组列表时,如果 Where-Object 的结果是单个项目,则会生成转换错误。但是当返回两个或多个项目时,相同的命令会成功。这是 PowerShell 错误还是我遗漏了什么?
为什么会失败?
PS C:\> [System.Collections.ArrayList]$AL1 = @(1,2,3)
PS C:\> [System.Collections.ArrayList]$AL2 = $AL1 | Where-Object {$_ -ge 3}
Cannot convert the "3" value of type "System.Int32" to type "System.Collections.ArrayList".
At line:1 char:1
+ [System.Collections.ArrayList]$AL2 = $AL1 | Where-Object {$_ -ge 3}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
但如果 Where-Object 的结果是两个或更多项,它不会失败。
PS C:\> [System.Collections.ArrayList]$AL1 = @(1,2,3)
PS C:\> [System.Collections.ArrayList]$AL2 = $AL1 | Where-Object {$_ -ge 2}
PS C:\> $AL2
2
3
PS C:\>
如果您首先通过 New-Object 创建第二个数组列表,则赋值也会成功。
PS C:\> $AL3 = New-Object System.Collections.ArrayList
PS C:\> $AL3 = $AL1 | Where-Object {$_ -ge 3}
PS C:\> $AL3
3
在 PSVersion 5.1.19041.1682 和核心 7.0.7 上测试
【问题讨论】:
标签: powershell powershell-core