了解管道输出以及如何使用它

时间:2016-08-22 22:30:33

标签: powershell

我在理解如何处理我在脚本中创建的输出时遇到了问题。

主要原因是这个例子:

$Output = @()
$Output += New-Object psobject -Property @{FirstName="Harry";LastName="Potter";Age=11}
$Output += New-Object psobject -Property @{FirstName="Hermione";LastName="Granger";Age=11}
$Output += New-Object psobject -Property @{FirstName="Ron";LastName="Weasley";Age=11}
$Output += New-Object psobject -Property @{FirstName="Ginny";LastName="Weasley";Age=10}
$Output += New-Object psobject -Property @{FirstName="Albus";LastName="Dumbledore";Age=150}
$Output += New-Object psobject -Property @{FirstName="Severus";LastName="Snape";Age=40}
Write-Output $Output

我可以使用我创建的表格,然后输入新的脚本参数。

说我正在创建一个像这样的新脚本

Param(
  [Parameter(ValueFromPipeline=$true,Mandatory=$true,Position=1)]
  $in
)

Write-Output $in

第一个脚本是a.ps1,第二个脚本名为b.ps1 我想提示:

.\a.ps1 | .\b.ps1

并打印完整的表格:

Age LastName                                            FirstName
--- --------                                            ---------
 11 Potter                                              Harry
 11 Granger                                             Hermione
 11 Weasley                                             Ron
 10 Weasley                                             Ginny
150 Dumbledore                                          Albus
 40 Snape                                               Severus

这是a.ps1脚本的输出,但如果我将它传递给b.ps1脚本,则会收到:

Age LastName                                            FirstName
--- --------                                            ---------
 40 Snape                                               Severus

我知道我做错了什么,但我基本上想要的功能类似于:

Get-Service | Stop-Service

Stop-Service是一个可以接受参数的独立命令,但也可以接受来自不同命令的管道输出,也可以正常工作。

1 个答案:

答案 0 :(得分:1)

我会这样做。 b.ps1的内容:

Param( 
  [Parameter(ValueFromPipeline=$true,Mandatory=$true,Position=1)]
  $in
)
begin
{
    $all = @()
}
process
{
    $all += $in
}
end
{
    $all | % { Write-Output $_ }
}

基本上在begin中初始化一个新数组,然后重新组合在process中传输的所有对象,最后循环遍历数组以显示其元素。

结果:

.\a.ps1 | .\b.ps1

Age FirstName LastName  
--- --------- --------  
11 Harry     Potter    
11 Hermione  Granger   
11 Ron       Weasley   
10 Ginny     Weasley   
150 Albus     Dumbledore
40 Severus   Snape