这是一个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
Run Code Online (Sandbox Code Playgroud)
编辑:我想我已经开始明白了。这是一个奇怪的例子。您只能从第二个对象输出或处理公共字段:
$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
Run Code Online (Sandbox Code Playgroud)
EDIT2:这与格式表的隐含运行以及它如何设置列有关。
我认为这是 cmdlet 的预期行为Write-Output
。它沿着管道发送对象(如果它是管道中的最后一个 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
Run Code Online (Sandbox Code Playgroud)
可以这样想,cmdlet 通常输出单个可预测的对象(Get-AdUser 输出 AdUser 对象。)如果 Get-AdUser 输出少量 AdUser、AdGroup、Mailbox,则管道和其他 cmdlet 将无法处理它、NTFSPermissions 作为一个数据流。
编辑:顺便说一句,如果您只是想在屏幕上获取信息而不使用Write-Host
,请考虑Write-Information
。
归档时间: |
|
查看次数: |
477 次 |
最近记录: |