Я пытаюсь использовать 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
, и вы поймете, что я имею в виду.