2

У меня есть пользовательский объект, и я хотел бы изменить имя свойства одного из существующих свойств. Это возможно? Я знаю, что могу создать новое свойство с новым именем, скопировать значения из старого свойства и затем выбрать только те свойства, которые я хочу (новое свойство, но исключить старое), но есть ли более простой способ?

2 ответа2

2

Со свойствами объекта "Имя" доступно только для чтения и поэтому не может быть изменено во время выполнения.

$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.

Альтернативой созданию нового свойства и копированием значений может быть создание нового « AliasProperty », которое представляет собой новое свойство (со своим собственным именем), которое просто связано с существующим свойством.

например.:

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
0

Добавив к ответу выше, вы можете сделать что-то вроде

$ obj2 = $ objtest | выберите NotFoo, NotBar

Чтобы навсегда удалить оригинальных участников

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .