powershell - 如何根据某些条件将数据 fork 到不同的管道中?

标签 powershell

是否可以根据某些条件将管道数据发送到两条不同的路径,而无需重新执行上游命令?这里的符号都是错误的,但这是我希望看到的......

PS> Get-SomeInterestingData `
    | ?{ <condition> } `
    | %{ <positive> } `
    | %{ <negative> }

我可以使用嵌套管道/表达式来实现吗?

PS> Get-SomeInterestingData `
    | %{ 
        $_ | ?{ <condition> } | %{ <positive> } -or `
        $_ | ?{ -not <condition> } | %{ <positive> } 
    }

如果您无法直接访问数据或数据生成函数,而是从管道接收数据怎么办?比如,作为脚本或函数参数 block 的一部分,例如...

param(
    [Parameter(ValueFromPipeline = $true)]
    $InputObject,
)

最佳答案

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

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

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

关于powershell - 如何根据某些条件将数据 fork 到不同的管道中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44552281/

相关文章:

java - 测试使用 visual studio 编写的 C++ android 应用程序的最佳方法是什么。无需升级到 windows 专业版

powershell - 使用Powershell从纯文本文件中提取表

json - PowerShell -- 访问 JObject 中的 JArray

powershell - 如何在 PowerShell v3 模块中可靠地引用外部 .NET 程序集?

用于将文件夹和内容复制到远程位置的 Powershell 脚本

powershell - 在 PowerShell 中深度复制字典(哈希表)

azure - 如何使用 Powershell 从 Microsoft Azure 恢复已删除的容器?

Powershell:如何同时使用 Invoke-Command 和 dot sourcing?

windows - 如何从提升的 PowerShell 控制台以非管理员身份运行进程?

powershell - 使用 PowerShell 格式化磁盘而不提示确认