You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:15:09