结合多个PowerShell cmdlet输出

时间:2015-10-13 09:37:00

标签: .net powershell c#-4.0 pipeline cmdlets

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

例如:

Command-GetA  -combine  Command-GetB | Command-GetD

所以我想通过管道将GetAGetB的输出发送到GetD。有没有一种使用PowerShell脚本或.NET cmdlet执行此操作的简洁方法?除了将输出存储在数组中然后将其传递给管道之外的其他方法?

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

Command-GetA  -combine  ( Command-GetB | Command-GetD ) | Command-GetF

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

编辑:

如果我可以做这样的事情会很好 - @(GetA; GetB)-ConvertToASingleList | GetC

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

4 个答案:

答案 0 :(得分:1)

@PetSerAl建议的解决方案似乎符合您的要求:

author_name
publisher_key

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

  

脚本块返回脚本块中所有命令的输出,可以是单个对象,也可以是数组。

答案 1 :(得分:0)

不是很紧凑,但我会这样做:

MultiLine

答案 2 :(得分:0)

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

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

因此,如果" GetC"是一个连接的cmdlet,整个" GetC" cmdlet代码只对我的所有输入文件运行一次(每次运行时都会重新创建输出文件" concat")

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

编辑:

这很完美!

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

谢谢@PetSerAl

答案 3 :(得分:0)

万一任何人都无法使用上面提到的怪异情况,您也可以使用-join。

EG。

-join($(Command-GetA), "," , $(Command-GetB))

这将导致一个适用于csv的字符串。