PowerShell写入输出错误与脚本中的多个对象?

时间:2017-06-19 04:16:05

标签: powershell

这是一个powershell错误吗?它只会在脚本中打印$ var1而不是$ var2(我无法将其传送到where-object)。但是当我将它复制并粘贴到命令行时,它可以正常工作。

$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

1 个答案:

答案 0 :(得分: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输出了一小部分,那么管道和其他cmdlet将无法处理它。 AdUser,AdGroup,Mailbox和NTFSPermissions作为一个数据流。

修改:顺便说一句,如果您只是在不使用Write-Host的情况下查看屏幕上的信息,请考虑Write-Information