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