Добавляет определенный пользователем элемент в экземпляр объекта оболочки Windows PowerShell.
Синтаксис
Add-Member [-MemberType] {<AliasProperty> | <CodeProperty> | <Property> | <NoteProperty> | <ScriptProperty> | <Properties> | <PropertySet> | <Method> | <CodeMethod> | <ScriptMethod> | <Methods> | <ParameterizedProperty> | <MemberSet> | <Event> | <All>} [-Name] <string> -InputObject <psobject> [[-Value] <Object>] [[-SecondValue] <Object>] [-Force] [-PassThru] [<CommonParameters>]
Описание
Командлет Add-Member добавляет определенный пользователем элемент в экземпляр объекта Windows PowerShell. Он позволяет добавлять следующие типы элементов: AliasProperty, CodeProperty, NoteProperty, ScriptProperty, PropertySet, CodeMethod, MemberSet и ScriptMethod. Первоначальное значение элемента задается с помощью параметра Value. При добавлении элементов AliasProperty, ScriptProperty, CodeProperty и CodeMethod можно указать дополнительные сведения с помощью параметра SecondValue.
Дополнительные элементы добавляются в конкретный экземпляр объекта, передаваемый по конвейеру командлету Add-Member или указанный с помощью параметра InputObject. Дополнительный элемент доступен, только пока существует соответствующий экземпляр объекта. Командлет Export-Clixml позволяет сохранить экземпляр вместе с дополнительными элементами в файле. Данные из такого файла могут использоваться командлетом Import-Clixml для восстановления экземпляра объекта.
Параметры
-Force
Добавляет новый элемент, даже если элемент с таким именем уже существует. Не работает с основными элементами типа.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-InputObject <psobject>
Задает объект, в который добавляется новый элемент. Введите переменную, содержащую объекты, либо команду или выражение для получения объектов.
Обязательно? |
true |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
true (ByValue) |
Принимать подстановочные знаки? |
false |
-MemberType <PSMemberTypes>
Задает тип добавляемого элемента. Этот параметр является обязательным.
Допустимые значения этого параметра:
-- AliasProperty: свойство, определяющее новое имя существующего свойства;
-- CodeMethod: метод, ссылающийся на статический метод класса Microsoft .NET Framework;
-- CodeProperty: свойство, ссылающееся на статическое свойство класса .NET Framework;
-- MemberSet: заранее определенный набор свойств и методов, например PSBase, PSObject и PSTypeNames;
-- Method: метод базового объекта .NET Framework;
-- NoteProperty: свойство со статическим значением;
-- ParameterizedProperty: свойство, принимающее параметры и значения параметров;
-- Property: свойство базового объекта .NET Framework;
-- PropertySet: заранее определенный набор свойств объекта;
-- ScriptMethod: метод, значением которого является результат выполнения скрипта;
-- ScriptProperty: свойство, значением которого является результат выполнения скрипта;
-- All: получает все типы элементов;
-- Methods: получает все типы методов объекта (например, method, codemethod, scriptmethod);
-- Properties: получает все типы свойств объекта (например, property, codeproperty, aliasproperty, scriptproperty).
Не у всех объектов имеются элементы каждого из типов. Если указать тип элемента, который у объекта отсутствует, оболочка Windows PowerShell вернет ошибку.
Недопустимо использовать с командлетом Add-Member тип элемента Event.
Обязательно? |
true |
Позиция? |
1 |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
true |
-Name <string>
Задает имя добавляемого элемента.
Если имя параметра "Name" опущено, его значение должно быть вторым безымянным значением в команде. Если имя этого параметра указано, порядок параметров может быть любым.
Обязательно? |
true |
Позиция? |
2 |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-PassThru
Передает по конвейеру расширенный объект. По умолчанию этот командлет не формирует никаких выходных данных.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-SecondValue <Object>
Задает необязательные дополнительные сведения об элементах AliasProperty, ScriptProperty, CodeProperty или CodeMethod. Если с его помощью добавляется элемент AliasProperty, этот параметр должен быть типом данных. К значению AliasProperty добавляется преобразование (приведение) к указанному типу данных. Например, при добавлении элемента AliasProperty, определяющего альтернативное имя свойства строки, можно также указать параметр SecondValue типа System.Int32, указывающий, что значение свойства строки при доступе к нему с помощью соответствующего элемента AliasProperty должно быть преобразовано в целое число.
Параметр SecondValue можно использовать для указания дополнительного элемента ScriptBlock при добавлении элемента ScriptProperty. В таком случае первый элемент ScriptBlock, заданный в параметре Value, используется для получения значения переменной. Второй элемент ScriptBlock, заданный в параметре SecondValue, используется для задания значения переменной.
Обязательно? |
false |
Позиция? |
4 |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-Value <Object>
Задает первоначальное значение добавленного элемента. При добавлении элемента AliasProperty, CodeProperty или CodeMethod можно предоставить необязательные дополнительные сведения с помощью параметра SecondValue.
Обязательно? |
false |
Позиция? |
3 |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
<CommonParameters>
Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.
Ввод и вывод
Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.
Входные данные |
System.Management.Automation.PSObject Любой тип объекта можно передать командлету Add-Member по конвейеру. |
Выходные данные |
Нет или System.Object Если задан параметр PassThru, командлет Add-Member возвращает расширенный объект. В противном случае этот командлет не формирует никаких выходных данных. |
Примечания
Добавлять элементы можно только в объекты PSObject. Чтобы узнать, принадлежит ли объект к типу PSObject, используется оператор "is". Например, для проверки объекта, хранящегося в переменной $obj, следует ввести команду "$obj -is [PSObject]".
Имена параметров MemberType, Name, Value и SecondValue указывать необязательно. Если в команде отсутствуют имена параметров, безымянные значения параметров необходимо указывать в следующем порядке: MemberType, Name, Value, SecondValue. При указании имен параметры могут следовать в любом порядке.
Пример 1
C:\PS>$a = (get-childitem)[0] C:\PS> $a | add-member -membertype noteproperty -name Status -value done C:\PS> $a | get-member -type noteproperty TypeName: System.IO.DirectoryInfo Name MemberType Definition ---- ---------- ---------- PSChildName NoteProperty System.String PSChildName=Co PSDrive NoteProperty System.Management.Automation PSIsContainer NoteProperty System.Boolean PSIsContainer PSParentPath NoteProperty System.String PSParentPath=M PSPath NoteProperty System.String PSPath=Microso PSProvider NoteProperty System.Management.Automation Status NoteProperty System.String Status=done Описание ----------- Эти команды добавляют свойство-примечание Status в объект DirectoryInfo, возвращенный командлетом Get-ChildItem, и присваивают ему значение "done". Первая команда получает первый объект, возвращаемый командлетом Get-Childitem (индекс 0). Вторая команда добавляет свойство-примечание. Третья команда передает обновленный объект командлету Get-Member с помощью оператора конвейера (|). Вывод показывает, что свойство было добавлено.
Пример 2
C:\PS>$a = (get-childitem)[0] C:\PS> $a | add-member -membertype aliasproperty -name FileLength -value Length C:\PS> $a.filelength Описание ----------- Эти команды добавляют свойство-псевдоним FileLength в объект DirectoryInfo, возвращенный командлетом Get-ChildItem. Новое свойство является псевдонимом для свойства Length. Первая команда получает первый объект, возвращаемый командлетом Get-Childitem (индекс 0). Вторая команда добавляет свойство-псевдоним. Третья команда возвращает значение нового свойства FileLength.
Пример 3
C:\PS>$a = "a string" C:\PS> $a = $a | add-member -membertype noteproperty -name StringUse -value Display -passthru C:\PS> $a.StringUse Описание ----------- Эти команды добавляют свойство StringUse для строки. Так как строка не является объектом PSObject, необходимо включить в команду параметр PassThru, чтобы сохранить расширенную строку в переменной. Последняя команда примера выводит новое свойство.
Пример 4
C:\PS>$a = "this is a string" C:\PS> $a = add-member -inputobject $a -membertype scriptmethod -name words ` -value {$this.split()} -passthru C:\PS> $a.words() Описание ----------- Эти команды добавляют в строковый объект метод-скрипт. Метод-скрипт предоставляет доступ к методу Split() класса System.String библиотеки классов .NET Framework, обеспечивая удобный способ получения отдельных слов строки путем вызова метода "Words" для объекта-строки. Обратите внимание, что используется параметр PassThru, чтобы командлет Add-Member возвратил расширенный объект-строку для сохранения в переменной $a.
Пример 5
C:\PS>$event = get-eventlog -logname system -newest 1 C:\PS> $event.TimeWritten | get-member C:\PS> add-member -inputobject $event -membertype aliasproperty -name When ` -value TimeWritten -secondvalue System.String C:\PS> $event.When | get-member Описание ----------- Эти команды добавляют элемент AliasProperty в объект EventLogEntry, возвращенный командлетом Get-EventLog. Свойство AliasProperty называется "When" и является псевдонимом имеющегося у объекта свойства TimeWritten. Параметр SecondValue указывает, что при доступе к свойству с помощью псевдонима AliasProperty значение свойства должно быть преобразовано в тип System.String. Свойство TimeWritten является объектом типа DateTime. В первой команде с помощью командлета Get-EventLog извлекается последнее событие из системного журнала событий и сохраняется в переменной $event. Вторая команда получает доступ к свойству TimeWritten этого события и передает его по конвейеру командлету Get-Member, чтобы показать, что это свойство принадлежит к типу DateTime. Командлет Add-Member затем используется для добавления элемента AliasProperty в экземпляр объекта EventLogEntry, сохраненного в переменной $event. Параметр Name используется для присвоения новому элементу имени "When", а параметр Value — для указания того, что этот элемент является псевдонимом свойства "TimeWritten". Параметр SecondValue указывает, что при использовании этого нового элемента тип возвращаемого им значения должен быть преобразован из System.DateTime в System.String. Третья команда обращается к новому элементу и передает его по конвейеру командлету Get-Member, чтобы показать, что он принадлежит к типу System.String.
Пример 6
C:\PS>function Copy-Property ($From, $To) { foreach ($p in Get-Member -InputObject $From -MemberType Property) { Add-Member -InputObject $To -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force $To.$($p.Name) = $From.$($p.Name) } } Описание ----------- Эта функция копирует все свойства одного объекта в другой объект. В первой команде функции объявляется имя функции и перечисляются ее параметры. В цикле Foreach с помощью командлета Get-Member происходит получение всех свойств объекта "From". Команды, расположенные внутри цикла Foreach, последовательно применяются к каждому из свойств. Команда Add-Member добавляет свойство объекта "From" объекту "To" в качестве свойства NoteProperty. Использование параметра Force позволяет добавлять элементы с одинаковыми именами. В последней команде новому свойству присваивается имя исходного свойства.
См. также