Добавляет определенный пользователем элемент в экземпляр объекта оболочки 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 позволяет добавлять элементы с одинаковыми именами.

В последней команде новому свойству присваивается имя исходного свойства.






См. также




Содержание