Add-Member

Добавляет пользовательские свойства и методы в экземпляр объекта PowerShell.

Синтаксис

Add-Member
   -InputObject <PSObject>
   -TypeName <String>
   [-PassThru]
   [<CommonParameters>]
Add-Member
   -InputObject <PSObject>
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [-NotePropertyMembers] <IDictionary>
   [<CommonParameters>]
Add-Member
   -InputObject <PSObject>
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [-NotePropertyName] <String>
   [-NotePropertyValue] <Object>
   [<CommonParameters>]
Add-Member
   -InputObject <PSObject>
   [-MemberType] <PSMemberTypes>
   [-Name] <String>
   [[-Value] <Object>]
   [[-SecondValue] <Object>]
   [-TypeName <String>]
   [-Force]
   [-PassThru]
   [<CommonParameters>]

Описание

Командлет Add-Member позволяет добавлять элементы (свойства и методы) в экземпляр объекта PowerShell. Например, можно добавить элемент NoteProperty, содержащий описание объекта или члена ScriptMethod , который запускает скрипт для изменения объекта.

Чтобы использовать Add-Member, передайте объект по конвейеру Add-Memberили используйте параметр InputObject для указания объекта.

Параметр MemberType указывает тип добавляемого элемента. Параметр Name назначает имя новому члену, а параметр Value задает значение элемента.

Свойства и методы добавляются только в определенный экземпляр указанного объекта. Add-Member не изменяет тип объекта. Чтобы создать новый тип объекта, используйте Add-Type командлет.

Вы также можете использовать Export-Clixml командлет для сохранения экземпляра объекта, включая дополнительные члены, в файле. Затем можно использовать Import-Clixml командлет для повторного создания экземпляра объекта на основе сведений, хранящихся в экспортируемом файле.

Начиная с версии Windows PowerShell 3.0, имеет новые функции, Add-Member которые упрощают добавление свойств заметок в объекты. С помощью параметров NotePropertyName и NotePropertyValue можно определить свойство примечания, а с помощью параметра NotePropertyMembers — получить хэш-таблицу имен и значений свойств примечаний.

Кроме того, начиная с выпуска Windows PowerShell 3.0 параметр PassThru, который создает выходной объект, требуется реже. Add-Member теперь добавляет новые члены непосредственно во входной объект большего количества типов. Подробнее см. в описании параметра PassThru.

Примеры

Пример 1. Добавление свойства заметки в PSObject

В следующем примере добавляется свойство заметки о состоянии со значением Done в объект FileInfo , представляющий Test.txt файл.

Первая команда использует Get-ChildItem командлет для получения объекта FileInfo , представляющего Test.txt файл. Он сохраняет его в переменной $a .

Вторая команда добавляет свойство note в объект.$a

Третья команда использует нотацию точек для получения значения свойства Status объекта в $a. Как показано в выходных данных, значение "Готово".

$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status

Done

Пример 2. Добавление свойства псевдонима в PSObject

В следующем примере в объект, представляющий Test.txt файл, добавляется свойство псевдонима size. Новое свойство является псевдонимом для свойства Length .

Первая команда использует Get-ChildItem командлет для получения Test.txt объекта FileInfo.

Вторая команда добавляет свойство псевдонима size . Третья команда использует нотацию точек для получения значения нового свойства Size .

$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size

2394

Пример 3. Добавление свойства заметки StringUse в строку

В этом примере свойство заметки StringUse добавляется в строку. Так как Add-Member не удается добавить типы в входные объекты String , можно указать параметр PassThru для создания выходного объекта. Последняя команда в этом примере выводит новое свойство.

В этом примере используется параметр NotePropertyMembers . Значение параметра NotePropertyMembers представляет собой хэш-таблицу. Ключом является имя свойства заметки , StringUse, а значением является значение свойства заметки Display.

$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse

Display

Пример 4. Добавление метода скрипта в объект FileInfo

В этом примере метод скрипта SizeInMB добавляется к объекту FileInfo , который вычисляет размер файла к ближайшему Мегабайту. Вторая команда создает ScriptBlock , использующий статический метод Round из [math] типа для округления размера файла до второго десятичного разряда.

Параметр Value также использует автоматическую $This переменную, представляющую текущий объект. Переменная $This действительна только в блоках скриптов, определяющих новые свойства и методы.

Последняя команда использует нотацию точек для вызова нового метода скрипта SizeInMB для объекта в переменной $A .

$A = Get-ChildItem C:\Temp\test.txt
$S = {[math]::Round(($this.Length / 1MB), 2)}
$A | Add-Member -MemberType ScriptMethod -Name "SizeInMB" -Value $S
$A.SizeInMB()

0.43

Пример 5. Копирование всех свойств объекта в другой

Эта функция копирует все свойства одного объекта в другой объект.

Цикл foreach использует Get-Member командлет для получения каждого свойства объекта From . Команды в цикле foreach выполняются последовательно для каждого свойства.

Команда Add-Member добавляет свойство объекта From в объект To в виде NoteProperty. Значение копируется с помощью параметра Value . Он использует параметр Force для добавления элементов с тем же именем элемента.

function Copy-Property ($From, $To)
{
    $properties = Get-Member -InputObject $From -MemberType Property
    foreach ($p in $properties)
    {
        $To | Add-Member -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force
    }
}

Пример 6. Создание пользовательского объекта

В этом примере создается пользовательский объект Asset .

Командлет New-Object создает PSObject. В этом примере файл PSObject сохраняется в переменной $Asset .

Вторая команда использует ускоритель [ordered] типов для создания упорядоченного словаря имен и значений. Команда сохраняет результат в переменной $D .

Третья команда использует параметр NotePropertyMembers командлета Add-Member для добавления словаря в переменную в $DPSObject. Свойство TypeName присваивает новому имени, ресурсуPSObject.

Последняя команда передает новый объект Asset в Get-Member командлет. Выходные данные показывают, что объект имеет имя типа Asset и свойства заметки, определенные в упорядоченном словаре.

$Asset = New-Object -TypeName PSObject
$d = [ordered]@{Name="Server30";System="Server Core";PSVersion="4.0"}
$Asset | Add-Member -NotePropertyMembers $d -TypeName Asset
$Asset | Get-Member

TypeName: Asset

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
Name        NoteProperty System.String Name=Server30
PSVersion   NoteProperty System.String PSVersion=4.0
System      NoteProperty System.String System=Server Core

Параметры

-Force

Указывает, что этот командлет добавляет новый элемент, даже у объекта есть пользовательский член с тем же именем. Параметр Force нельзя использовать для замены стандартного элемента типа.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Указывает объект, в который добавляется новый член. Введите переменную, которая содержит объекты, или команду или выражение, которое возвращает объекты.

Type:PSObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-MemberType

Указывает тип добавляемого элемента. Это обязательный параметр. Допустимые значения для этого параметра:

  • NoteProperty
  • AliasProperty
  • ScriptProperty
  • CodeProperty
  • ScriptMethod
  • CodeMethod

Дополнительные сведения об этих значениях см. в описании перечисления PSMemberTypes в пакете SDK для PowerShell.

Не у всех объектов имеются члены всех типов. Если указать тип члена, который у объекта нет, PowerShell возвращает ошибку.

Type:PSMemberTypes
Aliases:Type
Accepted values:AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Name

Указывает имя члена, добавляемого этим командлетом.

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-NotePropertyMembers

Задает хэш-таблицу или упорядоченный словарь имен и значений свойств примечаний. Введите хэш-таблицу или словарь, в котором ключи представляют имена свойств примечаний, а значения — значения этих свойств.

Дополнительные сведения о хэш-таблицах и упорядоченных словарях в PowerShell см. в about_Hash_Tables.

Этот параметр впервые появился в Windows PowerShell 3.0.

Type:IDictionary
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-NotePropertyName

Указывает имя свойства заметки.

Используйте этот параметр с параметром NotePropertyValue. Этот параметр является необязательным.

Этот параметр впервые появился в Windows PowerShell 3.0.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-NotePropertyValue

Указывает значение свойства заметки.

Используйте этот параметр с параметром NotePropertyName . Этот параметр является необязательным.

Этот параметр впервые появился в Windows PowerShell 3.0.

Type:Object
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

Возвращает объект, представляющий элемент, с которым вы работаете. По умолчанию этот командлет не создает выходные данные.

Для большинства объектов Add-Member добавляет новые члены во входной объект. Однако, если входной объект является строкой, Add-Member не удается добавить элемент во входной объект. В случае с такими объектами используйте параметр PassThru для создания выходного объекта.

В Windows PowerShell 2.0 Add-Member добавлены члены только в оболочку ОБЪЕКТОВ PSObject, а не в объект. Используйте параметр PassThru , чтобы создать выходной объект для любого объекта с оболочкой PSObject .

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SecondValue

Указывает дополнительные сведения о членах AliasProperty, ScriptProperty, CodeProperty или CodeMethod.

Если этот параметр используется при добавлении AliasProperty, этот параметр должен быть типом данных. Преобразование в указанный тип данных добавляется к значению AliasProperty.

Например, при добавлении aliasProperty , предоставляющего альтернативное имя для строкового свойства, можно также указать параметр SecondValueSystem.Int32 , чтобы указать, что значение этого строкового свойства должно быть преобразовано в целое число при обращении с помощью соответствующего AliasProperty.

Параметр SecondValue можно использовать для указания дополнительного объекта ScriptBlock при добавлении элемента ScriptProperty . Первый ScriptBlock, указанный в параметре Value , используется для получения значения переменной. Второй ScriptBlock, указанный в параметре SecondValue , используется для задания значения переменной.

Type:Object
Position:3
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TypeName

Указывает имя типа.

Если тип является классом в пространстве имен System или типе с акселератором типов, можно ввести короткое имя типа. В остальных случаях требуется полное имя типа. Этот параметр действует только в том случае, если InputObject является PSObject.

Этот параметр впервые появился в Windows PowerShell 3.0.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Value

Задает исходное значение добавленного члена. При добавлении элемента AliasProperty, CodeProperty, ScriptProperty или CodeMethod можно указать дополнительные сведения с помощью параметра SecondValue .

Type:Object
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

PSObject

В этот командлет можно передать любой тип объекта.

Выходные данные

None or System.Object

При использовании параметра PassThru этот командлет возвращает новый расширенный объект. В противном случае командлет не формирует никаких выходных данных.

Примечания

Элементы можно добавлять только в объекты PSObject . Чтобы определить, является ли объект объектом PSObject , используйте -is оператор.

Например, чтобы проверить объект, хранящийся в переменной $obj , введите $obj -is [PSObject].

Имена параметров MemberType, Name, Value и SecondValue являются необязательными. Если имена параметров опущены, значения неименованных параметров должны отображаться в следующем порядке: MemberType, Name, Value и SecondValue.

При указании имен параметры могут следовать в любом порядке.

Автоматическую $this переменную можно использовать в блоках скриптов, определяющих значения новых свойств и методов. Переменная $this ссылается на экземпляр объекта, к которому добавляются свойства и методы. Дополнительные сведения о переменной $this см. в about_Automatic_Variables.