Powershell:当数组中只剩下一个对象时,如何正确计算对象数组中的项目数

mig*_*llo 2 arrays powershell psobject

我有一个对象数组,每个对象都有 N 个属性。我使用这样的方法执行子集操作Where-Object,例如:

$mySubset = $myArrayOfObjects | Where-Object {($_.Property1 -eq 'ABC') -and ($_.Property2 -eq 'DEF')}
Run Code Online (Sandbox Code Playgroud)

然后我需要检查这个数组中有多少个对象。我这样做:

$mySubset.Count
Run Code Online (Sandbox Code Playgroud)

当子集数组中有多个对象时,它会显示对象的数量。但是,当我只剩下一个对象时$mySubset,它不会将其视为只有一个元素的数组,而是$mySubset.Count返回 N - 每个对象中的属性数量。这就是问题。在这种情况下,如何说服 Powershell 将$mySubset其视为包含 1 项的数组?

mkl*_*nt0 6

最符合 PowerShell 习惯的解决方案是使用@(),即数组子表达式运算符,它可以确保命令的输出被视为数组,即使只返回一个对象:

$mySubset = @($myArrayOfObjects | ...)
Run Code Online (Sandbox Code Playgroud)

直接获取计数:@($myArrayOfObjects | ...).Count

您还可以使用[array] 类型约束- 本质上是放置在目标变量左侧的强制转换 - 这不需要修改 RHS:

[array] $mySubset = $myArrayOfObjects | ...
Run Code Online (Sandbox Code Playgroud)