能否通过psobject.Properties.Add()为PsCustomObject添加属性?为何报错?
解决PSCustomObject属性添加的重载错误问题
你遇到的问题核心很明确:psobject.Properties.Add()的重载不支持直接传入键值对字符串,它要求传入的是PSPropertyInfo类型的对象,直接传"bar", "bar"找不到匹配的重载,所以触发了报错。
最简便的解决方案
给PSCustomObject添加属性根本不用绕到psobject.Properties,直接用原生赋值语法就行,这是PowerShell最常用的操作方式:
$o = [PSCustomObject]@{foo = "foo"} # 直接添加属性 $o.bar = "bar" # 验证结果 $o
输出示例:
foo bar --- --- foo bar
用psobject.Properties.Add()的正确姿势
如果非要通过Properties集合添加属性,得先创建NoteProperty对象(PSCustomObject的属性默认都是这个类型),再传给Add方法:
$o = [PSCustomObject]@{foo = "foo"} # 创建NoteProperty实例,参数为属性名和对应值 $newProperty = New-Object System.Management.Automation.NoteProperty("bar", "bar") # 调用Add方法传入该对象 $o.psobject.Properties.Add($newProperty) # 验证结果 $o
补充:为什么移除属性可以直接传字符串?
你之前用的$SomeObject.psobject.properties.remove('SomeProperty')能生效,是因为Remove方法有支持传入字符串(属性名)的重载,而Add方法没有,所以两者的操作逻辑并不完全一致。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

