Emi*_*ggi 15 powershell pipeline statements conditional-statements
我正试图if在管道内使用.
我知道有where(别名?)过滤器,但是如果我想只在满足某个条件时才激活过滤器怎么办?
我的意思是,例如:
get-something | ? {$_.someone -eq 'somespecific'} | format-table
如何if在管道内使用来打开/关闭过滤器?可能吗?是否有意义?
谢谢
编辑澄清
没有管道,它看起来像这样:
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,你会明白我的意思.
Dan*_*nak 15
使用where-object时,条件不必严格与通过管道的对象相关.因此,考虑一下有时我们想要过滤奇数对象的情况,但只有在满足其他条件的情况下:
$filter = $true
1..10 | ? { (-not $filter) -or ($_ % 2) }
$filter = $false
1..10 | ? { (-not $filter) -or ($_ % 2) }
Run Code Online (Sandbox Code Playgroud)
这是你在寻找什么?
| 归档时间: |
|
| 查看次数: |
32344 次 |
| 最近记录: |