我想做这样的事情:
<statement> | <filter1> | <filter2> if <condition> | <filter3> | <filter4> | <filter5>
Run Code Online (Sandbox Code Playgroud)
<statement>的结果通过<filter1>运行,然后只有满足<condition>才会运行<filter2>,然后通过剩余的过滤器运行,无论是否应用了<filter2>.这相当于:
if (<condition>) {
<statement> | <filter1> | <filter2> | <filter3> | <filter4> | <filter5>
} else {
<statement> | <filter1> | <filter3> | <filter4> | <filter5>
}
Run Code Online (Sandbox Code Playgroud)
这在仅在调用某个开关时将给定过滤器应用于结果集的函数中非常有用.如果条件过滤器在长流水线中早期发生,则使用外部if块编写它会导致大量重复代码,尤其是在存在多个条件过滤器的情况下.
这是一个例子.以下函数显示给定帐户在给定目录子树中Show-AccountPerms \\SERVERX\Marketing DOMAIN\jdoe具有的权限(例如,在\ SERVERX\Marketing下的目录树中提供用户DOMAIN\jdoe具有的权限报告).
function Show-AccountPerms {
param (
[parameter(mandatory = $true)]$rootdir,
[parameter(mandatory = $true)]$account,
[switch]$files,
[switch]$inherited
)
gci -r $rootdir `
|where {$_.psiscontainer} `
|foreach {
$dir = $_.fullname
(get-acl $_.pspath).access `
| where …Run Code Online (Sandbox Code Playgroud) 假设我只想将输出管道输出到另一个函数,具体取决于变量的值,是否有一些方法可以在powershell中执行此操作?
示例:
if ($variable -eq "value"){$output | AnotherFunction}
else {$output}
Run Code Online (Sandbox Code Playgroud)
@ mjolinor的例子是我现在正在做的事情,只是好奇是否有更好的方法来做到这一点.