我只是不明白为什么会这样。如果我创建两个单独的新 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
我希望看到 abc 和 def 的输出,但我只得到 abc:
abc
---
123
如果我改用 write-host,就像这样:
write-host $o1
write-host $o2
然后它显示如下输出:
@{abc=123}
@{def=456}
因此,根据 write-output,$o2 为 null/empty,但 write-host 说那是谎言。
这是怎么回事?
最佳答案
如果您从控制台运行示例行,您将看不到任何问题。如果你在脚本中运行它们,你会看到一个问题。这是因为 Out-Default(位于每个管道的末尾)基于它看到的第一个对象进行格式化决策。因此,您需要确保输出的对象类型不超过一种。或者,如果您是,则需要创建一些格式化规则来处理所有对象类型(例如对 Get-ChildItem 的目录和文件输出所做的操作)。
关于powershell - 有人可以解释 Powershell 的这种奇怪的 PSObject + 添加成员行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748969/