2015-10-19 92 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