powershell - 有人可以解释 Powershell 的这种奇怪的 PSObject + 添加成员行为吗?

标签 powershell

我只是不明白为什么会这样。如果我创建两个单独的新 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/

相关文章:

powershell - 对 var2 的更改也会更改 var1 派生自 var1

postgresql - 未提供密码/未找到位置参数 PostgreSQL - Powershell

Powershell - 合并 CSV 文件并附加一列

powershell - 从 PowerShell 部署后操作 Hook 访问 Azure/Kudu 变量

xml - 查找 xml 节点的完整 xpath

javascript - 尝试使 hmac-sha256 与适用于 Canvas API 的 Powershell 一起使用

Maven 可以在 cmd 中运行,但不能在 powershell 中运行

PowerShell计算错误

mysql - 使用 Ansible 导入 MySQL 转储

powershell - 使用Powershell中的机器 key 加密字符串?