powershell在脚本中写入多个对象的输出错误?

powershell在脚本中写入多个对象的输出错误?,powershell,Powershell,这是一个powershell bug吗?它将只在脚本中打印$var1,而不是$var2(我也不能将其管道传输到where对象)。但是,当我复制并粘贴到命令行时,效果很好 $var1 = New-Object -TypeName PSObject -Prop @{'data1'=6} write-output $var1 $var2 = New-Object -TypeName PSObject -Prop @{'data2'=12} write-output $var2 data1 ----

这是一个powershell bug吗?它将只在脚本中打印$var1,而不是$var2(我也不能将其管道传输到where对象)。但是,当我复制并粘贴到命令行时,效果很好

$var1 = New-Object -TypeName PSObject -Prop @{'data1'=6}
write-output $var1
$var2 = New-Object -TypeName PSObject -Prop @{'data2'=12}
write-output $var2


data1
------
6
编辑:我想我开始明白了。这里有一个更奇怪的例子。只能从第二个对象输出或处理公共字段:

$var1 = New-Object PSObject -prop @{data1=6;data3=5}
$var1
$var2 = New-Object PSObject -prop @{data2=12;data3=6}
$var2


data1 data3
----- -----
    6     5
          6
EDIT2:这与format表的隐含运行以及它如何设置列有关。

我认为这是
Write-Output
cmdlet的预期行为。它通过管道发送对象(如果它是管道中的最后一个cmdlet,则会显示给主机)。它希望通过管道发送的所有对象都具有相同的属性

在您的示例中,一个对象的属性为
data1
,另一个对象的属性为
data2
。如果您使两个对象使用相同的属性,它将按预期工作:

$var1 = New-Object -TypeName PSObject -Prop @{'data1'=6}
write-output $var1
$var2 = New-Object -TypeName PSObject -Prop @{'data1'=12}
write-output $var2

data1
-----
    6
   12
可以这样想,cmdlet通常会输出一个可预测的对象(Get-AdUser outputs AdUser objects)。如果Get-AdUser将AdUser、AdGroup、Mailbox和NTFS任务作为一个数据流输出,管道和其他cmdlet将无法处理它


编辑:作为一个旁白,如果你只想在屏幕上获取信息而不使用<代码>写主机< /> >,考虑

……当它[Out-Debug ]时将流发送到Format Table,该命令需要生成列。它通过查看第一个对象的属性(这些属性成为列)来执行此操作。如果第一个对象有2个属性,则即使流中的所有其他对象都有10个属性,您也会得到一个2列的表。”--