我有一个自定义对象,我想更改现有属性之一的属性名称。可以吗?我知道我可以用新名称创建一个新属性,从旧属性中复制值,然后仅选择我想要的属性(新属性,但排除旧属性),但有没有更简单的方法?
答案1
对象属性的“名称”是只读属性,因此在运行时无法更改。
$objTest = New-Object -TypeName PSObject -Property @{ Foo = 42; Bar = 99 }
$objTest.PSObject.Properties["Foo"].Name # Output: Foo.
$objTest.PSObject.Properties["Foo"].Name = "NotFoo" # Output: 'Name' is a ReadOnly property.
创建新属性并复制值的替代方法是创建一个新的“别名属性“,这是一个新属性(有自己的名称),它只是简单地链接到现有属性。
例如。:
PS Y:\> $objTest | Add-Member -MemberType AliasProperty -Name Notfoo -Value Foo
PS Y:\> $objtest
Bar Foo Notfoo
--- --- ------
99 42 42
PS Y:\> $objtest.Foo = 123
PS Y:\> $objtest
Bar Foo Notfoo
--- --- ------
99 123 123
答案2
除了上面的答案之外,您还可以执行以下操作
$obj2 = $objtest|选择NotFoo,NotBar
永久删除原始成员