如何在管道内使用“if”语句

2024-02-08

我正在尝试使用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你就会明白我的意思。


使用 where-object 时,条件不必严格与通过管道传递的对象相关。因此,考虑这样一种情况,有时我们想要过滤奇怪的对象,但前提是满足其他一些条件:

$filter = $true
1..10 | ? { (-not $filter) -or ($_ % 2) }

$filter = $false
1..10 | ? { (-not $filter) -or ($_ % 2) }

这是您正在寻找的吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在管道内使用“if”语句 的相关文章

随机推荐