合并多个PowerShell cmdlet输出
我有一个要求,结合使用.NET中的CmdLets作为管道输出给出多个Power Shell脚本的输出。合并多个PowerShell cmdlet输出
例如:
Command-GetA -combine Command-GetB | Command-GetD
所以我想通过管道的GetA
和GetB
输出发送到GetD
。有没有一种紧凑的方式来使用PowerShell脚本或.NET cmdlet执行此操作?除了将输出存储在数组中并将其传递到管道之外的其他方法?
另一个复杂的例子可能是:
Command-GetA -combine (Command-GetB | Command-GetD) | Command-GetF
这应该结合GetA
和GetB|GetD
作为管道输入发送到GetF
编辑:
这将是很好,如果我可以做类似这 - @(GetA; GetB)-ConvertToASingleList | GetC
因此OutputOfGetA
和OutputOfGetB
不应该在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