我有一组对象(来自import-csv命令)我已经在一列上分组了。我根据其他一列过滤了这些数据,并尝试计算。
在过滤后的组中只有一条记录,它才能正常工作。然后它什么都不返回(从我能说的)。
function TestFun ( $data ) {
$data | Group-Object GroupColumn | Sort-Object SortColumn | % {
$currentObj = $_ | Select-Object -ExpandProperty Group
$count1 = ($currentObj | Where-Object { $_.FilterColumn -le 2}).Count
$count2 = ($currentObj | Where-Object { $_.FilterColumn -ge 2}).Count
}
}
这基本上就是我正在使用的代码,简化了。就像我说的那样,如果有多行ge和/或le 2,它就可以了。如果只有一行,则不返回任何内容。
我正在分组,然后扩展结果,以便我可以一次遍历分组集合一个结果。如果有更好的方法,我可以接受建议。 :)
答案 0 :(得分:2)
使用array subexpression operator @( )
:
$count1 = @($currentObj | Where-Object { $_.FilterColumn -le 2}).Count
$count2 = @($currentObj | Where-Object { $_.FilterColumn -ge 2}).Count
即使没有项目滑过过滤器,也会正确返回0
按照您认为合适的列对它们进行分组很好,但您可能会发现Sort-Object SortColumn
似乎并没有做任何事情。
Group-Object
在管道下发送的对象只有3个属性(Count
,Name
,Group
),但这些属性都不匹配属性名称{{1因此,您可能希望在SortColumn
循环中移动该语句:
ForEach-Object