2015-10-19 123 views
1

我有一個powershell項目,我正在使用的是從數據庫中讀取數據使用函數,然後我使用管道來過濾該數據以找到我想。其中一個要求是我應該顯示所有不相關的數據以及獲取的數據。使用管道顯示過濾掉的數據和過濾掉的數據

Get-Foo($Connection) | 
Group Bar| 
? Count -eq 2 | 
? {$_.Group.Foobar -contains "A" -and $_.Group.Foobar -contains "B" -or $_.Group.Foobar -contains "A" -and $_.Group.Foobar -contains "C"} | 

所以基本上我想輸出的是包含只有A和B或只有A和C的所有記錄,但我也想顯示所有不包含此記錄。

Sample Data: 
(A, B, C, D, E) 
(A, B) 
(A, B, C, D) 
(A, B, E) 
(A) 
(A, C) 

Current Output: 
(A, B) 
(A, C) 

Required Output 
(A, B, C, D, E) 
(A, B, C, D) 
(A, B, E) 
(A) - List all the false outcomes of filtering 
(A, B) - Then list the true 
(A, C) 
+0

爲什麼不與'if'聲明環比數據,並創建兩個數組,一個與相匹配的數據當前'where'濾波器和一個不? – arco444

+0

@PetSerAl我將如何去顯示那些被過濾掉的對象? –

+0

您的示例和必需輸出對我來說似乎不正確?除了一個樣品*(A)*以外,所有樣品都含有(A和B)或(A和C)? –

回答

1

您可以使用Group-Object代替Where-Object。在這種情況下,你將有兩個組:一個用於假狀態,另一個用於真。

[email protected]' 
Bar,Foobar 
1,A 
1,B 
1,C 
1,D 
1,E 
2,A 
2,B 
3,A 
3,B 
3,C 
4,D 
5,A 
5,B 
5,E 
6,A 
7,A 
7,C 
'@|ConvertFrom-Csv 

$SampleData| 
Group-Object Bar| 
# I am join both your conditions into one. 
Group-Object {($_.Count -eq 2) -and (
        (($_.Group.Foobar -contains 'A') -and ($_.Group.Foobar -contains 'B')) -or 
        (($_.Group.Foobar -contains 'A') -and ($_.Group.Foobar -contains 'C')) 
      )}| 
# To have false before true. 
Sort-Object {$_.Values[0]}| 
# Expand groups. 
Select-Object @{Name='Condition';Expression={$_.Values[0]}} -ExpandProperty Group| 
# Display results to user. 
Format-Table -GroupBy Condition