组合多个 powershell cmdlet 输出

use*_*135 5 .net powershell pipeline c#-4.0 powershell-cmdlet

我需要使用 .NET 中的 CmdLets 组合多个 Power Shell 脚本的输出作为管道输出。

例如 :

Command-GetA  -combine  Command-GetB | Command-GetD
Run Code Online (Sandbox Code Playgroud)

所以我想通过管道发送和GetA的输出。是否有一种紧凑的方法可以使用 powershell 脚本或 .NET cmdlet 来执行此操作?除了将输出存储在数组中然后将其传递到管道等方法之外?GetBGetD

另一个复杂的例子可能是:

Command-GetA  -combine  ( Command-GetB | Command-GetD ) | Command-GetF
Run Code Online (Sandbox Code Playgroud)

这应该结合GetAGetB|GetD作为管道输入发送到GetF

编辑:

如果我能做这样的事情那就太好了 - @( GetA ; GetB) -ConvertToASingleList | 获取C

因此OutputOfGetAOutputOfGetB不应该在 上单独调用GetC。两者都应该作为组合数组或列表对象传递给GetC

小智 5

@PetSerAl 建议的解决方案似乎满足您的要求:

PS C:\> function Foo { 1..3 }
PS C:\> function Bar { 2..4 }
PS C:\> & { Foo; Bar | % { $_ + 2 } } | oh
1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)

脚本块将所有输出组合到一个数组中。此行为记录在about_Script_Blocks中:

脚本块以单个对象或数组的形式返回脚本块中所有命令的输出。


use*_*135 0

这给了我想要的最终结果:

$( 命令-GetA; 命令-GetB )| 小组结果 | 命令-GetC

因此,如果“GetC”是一个串联 cmdlet,则整个“GetC”cmdlet 代码仅对我的所有输入文件运行一次(每次运行“concat”时都会重新创建我的输出文件)

虽然上面所有的答案都是正确的,但我的要求有点不同:)

编辑:

太棒了!

,@(Command-GetA;Command-GetB)|Command-GetC

谢谢@PetSerAl