合并多个PowerShell cmdlet输出

我有一个要求,结合使用.NET中的CmdLets作为管道输出给出多个Power Shell脚本的输出。合并多个PowerShell cmdlet输出

例如:

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

回答:

这给了我,我期望的最终结果:

$(命令木屐;命令GetB)|组结果|命令GETC

因此,如果“GETC”是一串接cmdlet时,整个“GETC” cmdlet的代码只运行一次,我所有的输入文件(我的输出文件被创建重新我运行“CONCAT”每次)

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

编辑:

这是完美的!

,@(命令木屐;命令GetB)|命令GETC

感谢@PetSerAl

回答:

那么不是真的,紧凑,但我会做这样的:

$alldata = @() 

$geta = command-geta

$getb = command-getb

$getc = command-getc

#of course creating a function would be much more nicer in case the structure of A, B and C is the same

foreach ($a in $geta)

{

$temp = New-Object System.Object

$temp | Add-Member -MemberType NoteProperty -Name "aonedata" -Value $a.one

$temp | Add-Member -MemberType NoteProperty -Name "atwodata" -Value $a.two

$alldata += $temp

}

foreach ($b in $getb)

{

$temp = New-Object System.Object

$temp | Add-Member -MemberType NoteProperty -Name "bonedata" -Value $b.one

$temp | Add-Member -MemberType NoteProperty -Name "btwodata" -Value $b.two

$alldata += $temp

}

foreach ($c in $getc)

{

$temp = New-Object System.Object

$temp | Add-Member -MemberType NoteProperty -Name "conedata" -Value $c.one

$temp | Add-Member -MemberType NoteProperty -Name "ctwodata" -Value $c.two

$alldata += $temp

}

write-host $alldata

$alldata | convertto-csv | out-file "c:\temp\lotsofdata.txt"

回答:

通过@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

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

脚本块将脚本块中所有命令的输出作为单个对象或数组返回。

以上是 合并多个PowerShell cmdlet输出 的全部内容, 来源链接: utcz.com/qa/263166.html

回到顶部