2015-07-20 65 views
0

我有一組對象(從一個import-csv命令)我已經分組在一列。我正在根據其他列中的其中一列過濾這些數據並試圖計數。Powershell計數沒有返回過濾對象的數量

它工作正常,直到過濾組集合中有一條記錄。然後它什麼也沒有返回(從我能說的)。

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,它就可以工作。如果只有一行,則不返回任何內容。

我正在分組,然後擴展結果,以便我可以一次遍歷分組的集合中的一個結果。如果有更好的方法來做到這一點,我願意接受建議。 :)

回答

1

使用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個屬性(CountNameGroup)和這些都不匹配屬性名SortColumn,所以你可能要移動該聲明的ForEach-Object循環中的物體:

function TestFun { 
    param(
    [array]$data 
) 

    $data | Group-Object GroupColumn | ForEach-Object { 
    $currentObj = $_ | Select-Object -ExpandProperty Group | Sort-Object SortColumn 
    $count1 = @($currentObj | Where-Object { $_.FilterColumn -le 2}).Count 
    $count2 = @($currentObj | Where-Object { $_.FilterColumn -ge 2}).Count 

    } 
}