2015-10-19 2 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 или только А и С, но я также хочу, чтобы отобразить все записи, которые не содержат этого.

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 
Смежные вопросы