2017-06-19 39 views
3

这是一个PowerShell错误?它只会在脚本中打印$ var1,而不是$ var2(我不能将它管道到任何对象)。但是当我复制并粘贴到命令行时,它工作正常。powershell写入输出错误与脚本中的多个对象?

$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 
+0

[PowerShell:写入输出只写入一个对象]的可能重复(https://stackoverflow.com/questions/40257475/powershell-write-output-only-writes-one-object) – gms0ulman

回答

3

认为这是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便有输出ADUser便有对象。 )如果Get-AdUser将少量AdUser,AdGroup,Mailbox和NTFSPermission作为一个数据流输出,则管道和其他cmdlet将无法处理它。

编辑:另外,如果您只是在不使用Write-Host的情况下查看屏幕上的信息,请考虑Write-Information

+0

“...当它[Out-Default]将流发送到Format-Table,该命令需要生成列,它通过查看FIRST OBJECT的属性 - 这些成为列,如果第一个Object有2个属性,即使流中的所有其他对象都有10个属性,也可以获得2列表。“ - https://blogs.msdn.microsoft.com/powershell/2006/04/29/how-powershell-formatting-and-outputting-really-works/ – js2010