PowerShell写入输出缺少信息 - 仅打印第一个对象

v2b*_*v2b 5 c# powershell powershell-2.0

1.ps1创建并打印了2个对象.但只有一个出现在输出中.在以下情况下,两个对象都会出现:
(1)使用Format-List
(2)完成写入输出object1具有4个以上的属性(因此它会自动垂直格式化)
尝试理解此行为背后的原因.

PS C:\> cat .\1.ps1
$object1 = New-Object PSObject
$object1 | add-member NoteProperty -name pn1 -value pv1
$object1 | add-member NoteProperty -name pn2 -value pv2
$object1 | add-member NoteProperty -name pn3 -value pv3
write-output $object1

$object2 = New-Object PSObject
$object2 | add-member NoteProperty -name npn1 -value npv1
$object2 | add-member NoteProperty -name npn2 -value npv2
$object2 | add-member NoteProperty -name npn3 -value npv3
$object2 | add-member NoteProperty -name npn4 -value npv4
$object2 | add-member NoteProperty -name npn5 -value npv5
$object2 | add-member NoteProperty -name npn6 -value npv6
write-output $object2
PS C:\>
PS C:\> .\1.ps1

pn1                                     pn2                                     pn3
---                                     ---                                     ---
pv1                                     pv2                                     pv3


PS C:\>
Run Code Online (Sandbox Code Playgroud)

Bla*_*rai 2

如果您只是想显示信息,则应该使用Write-Host而不是Write-Output. 您希望Write-Output在管道中发送数据时使用,而不应该用于简单地显示数据。

这里有一篇文章给出了更深入的答案:我应该使用哪个:“Write-Host”、“Write-Output”或“[console]::WriteLine”?

从链接:

当您想要在管道中发送数据,但不一定想要将其显示在屏幕上时,应该使用 Write-Output。如果没有其他东西先使用它,管道最终会将其写入默认值。当您想做相反的事情时,应该使用 Write-Host。[console]::WriteLine 本质上是 Write-Host 在幕后所做的事情。