我只是不明白为什么会这样.如果我创建两个单独的新PSObject,它们似乎互相影响.例如,使用此代码:
$o1 = new-object psobject
$o1 | add-member noteproperty abc 123
$o2 = new-object psobject
$o2 | add-member noteproperty def 456
write-output $o1
write-output $o2
Run Code Online (Sandbox Code Playgroud)
我希望看到abc和def的输出,但我只得到abc:
abc
---
123
Run Code Online (Sandbox Code Playgroud)
如果我改用write-host,就像这样:
write-host $o1
write-host $o2
Run Code Online (Sandbox Code Playgroud)
然后它显示如下输出:
@{abc=123}
@{def=456}
Run Code Online (Sandbox Code Playgroud)
所以根据写输出,$ o2为空/空,但写主机说这是谎言.
这是怎么回事?
如果在脚本中输出多个不同的对象,则输出的列取决于管道中的第一个项目.由于第一个PSObject只有一个abc属性,所以第二个对象没有输出任何内容,因为它没有匹配的属性.
PS如果一次执行一行,则不会看到此行为.
如果从控制台运行示例行,您将看不到任何问题.如果您在脚本中运行它们,您将看到一个问题.这是因为Out-Default(在每个管道的末尾)将其格式化决策建立在它看到的第一个对象上.因此,您需要确保不输出多个对象类型.或者,如果您是,则需要创建一些处理所有对象类型的格式规则(例如,对Get-ChildItem的目录和文件输出所做的操作).
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |