如何根据某些条件在不同的管道中分叉数据?

Ant*_*ean 2 powershell

无论如何根据某些条件将管道数据发送到两个不同的路径,而不重新执行上游命令?这里的符号都错了,但这是我想看到的......

PS> Get-SomeInterestingData `
    | ?{ <condition> } `
    | %{ <positive> } `
    | %{ <negative> }
Run Code Online (Sandbox Code Playgroud)

我可以用嵌套的管道/表达式做到这一点吗?

PS> Get-SomeInterestingData `
    | %{ 
        $_ | ?{ <condition> } | %{ <positive> } -or `
        $_ | ?{ -not <condition> } | %{ <positive> } 
    }
Run Code Online (Sandbox Code Playgroud)

如果您无法直接访问数据或数据生成功能,但是您从管道接收它,该怎么办?比如说,作为脚本或函数param块的一部分,就像......

param(
    [Parameter(ValueFromPipeline = $true)]
    $InputObject,
)
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 5

在PowerShell 4.0及更高版本中,您可以Where()Split模式下使用扩展方法:

$Even,$Odd = @(1..10).Where({$_ % 2 -eq 0},'Split')
Run Code Online (Sandbox Code Playgroud)

输入集合将分为2个,满足过滤器的项目和不满足过滤器的项目.然后,您可以处理每个,而无需再次定义输入集合