我在理解如何处理我在脚本中创建的输出时遇到了问题。
主要原因是这个例子:
$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是一个可以接受参数的独立命令,但也可以接受来自不同命令的管道输出,也可以正常工作。
答案 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