Поделиться через


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

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

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

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

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

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

Done

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

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

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

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

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

2394

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

В этом примере свойство 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. Create пользовательского объекта

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

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

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

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

Последняя команда передает новый объект 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

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

  • ПримечаниеСвойство
  • 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.