PowerShell中PSObject.Copy()复制JSON对象后的修改差异求助
问题原因解释
PSObject.Copy()执行的是浅拷贝,这就是你看到两种不同结果的核心原因:
- 删除顶级
variables属性仅影响$B:浅拷贝会为新对象$B创建一个独立的顶级属性集合,修改$B的顶级属性(比如删除)只会作用于$B自身,不会影响原对象$A的顶级属性集合。 - 删除
$B.Variables.osProfile9会同步修改$A:浅拷贝不会递归复制嵌套的子对象,$B.Variables实际上是对$A.Variables这个子对象的引用——两者指向内存中的同一个对象。所以你对$B.Variables下属性的修改,本质是在操作和$A共享的那个子对象,自然会在$A中体现出来。
补充说明:ConvertFrom-Json生成的是PSCustomObject类型,PSObject.Copy()对该类型的处理逻辑就是浅拷贝。如果需要创建完全独立的深拷贝(包括所有嵌套对象),可以用以下方法:
- 借助JSON序列化/反序列化:
注意要指定足够大的$B = $A | ConvertTo-Json -Depth 100 | ConvertFrom-Json-Depth值,避免嵌套层级被截断。
内容的提问来源于stack exchange,提问作者sdo
相关产品推荐
相关产品推荐

