我正在尝试使用if
管道内。
我知道有where
(alias ?
) 过滤器,但是如果我想仅在满足特定条件时才激活过滤器怎么办?
我的意思是,例如:
get-something | ? {$_.someone -eq 'somespecific'} | format-table
如何使用if
在管道内打开/关闭过滤器?是否可以?是否有意义?
Thanks
编辑澄清
如果没有管道,它看起来像这样:
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
你就会明白我的意思。