Я пытаюсь использовать if
внутри конвейера.
Я знаю, что есть фильтр where
(alias ?
), но что, если я хочу активировать фильтр, только если выполняется определенное условие?
Я имею в виду, например:
get-something | ? {$_.someone -eq 'somespecific'} | format-table
Как использовать if
внутри конвейера для включения/выключения фильтра? Является ли это возможным? Имеет ли смысл?
Спасибо
EDITED, чтобы уточнить
Без конвейера это будет выглядеть так:
if($filter) { get-something | ? {$_.someone -eq 'somespecific'} } else { get-something }
РЕДАКТИРОВАТЬ после ANSWER riknik
Глупый пример, показывающий, что я искал. У вас есть денормализованная таблица данных, хранящаяся в переменной $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
, и вы поймете, что я имею в виду.