как использовать операторы «if» внутри конвейера

Я пытаюсь использовать if внутри конвейера.

Я знаю, что есть , где (псевдоним ? ), но что, если я хочу активировать фильтр только при выполнении определенного условия?

Я имею в виду, например:

get-something | ? {$_.someone -eq 'somespecific'} | format-table

Как использовать if внутри конвейера для переключения фильтра вкл выкл? Является ли это возможным? Есть ли в этом смысл?

Спасибо

EDITED за пояснение

Без конвейера это выглядело бы так:

if($filter) {
 get-something | ? {$_.someone -eq 'somespecific'}
}
else {
 get-something
}

EDIT после RIKNIK ANSWER

Глупый пример, показывающий то, что я искал. У вас есть денормализованная таблица данных, хранящаяся в переменной $ data , и вы хотите выполнить своего рода «детализированную» фильтрацию данных:

function datafilter {
param([switch]$ancestor,
    [switch]$parent,
    [switch]$child,
    [string]$myancestor,
    [string]$myparent,
    [string]$mychild,
    [array]$data=[])

$data |
? { (!$ancestor) -or ($_.ancestor -match $myancestor) } |
? { (!$parent) -or ($_.parent -match $myparent) } |
? { (!$child) -or ($_.child -match $mychild) } |

}

Например, если я хочу выполнить фильтрацию по определенному родителю только:

datafilter -parent -myparent ' myparent '-data $ mydata

Это очень элегантный, производительный и простой способ использования ? . Попробуйте сделать то же самое, используя if , и вы поймете, что я имею в виду.

15
задан Emiliano Poggi 29 April 2011 в 06:45
поделиться