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


Add-Member

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

Синтаксис

TypeNameSet (по умолчанию)

Add-Member
    -InputObject <PSObject>
    -TypeName <String>
    [-PassThru]
    [<CommonParameters>]

NotePropertyMultiMemberSet

Add-Member
    [-NotePropertyMembers] <IDictionary>
    -InputObject <PSObject>
    [-TypeName <String>]
    [-Force]
    [-PassThru]
    [<CommonParameters>]

NotePropertySingleMemberSet

Add-Member
    [-NotePropertyName] <String>
    [-NotePropertyValue] <Object>
    -InputObject <PSObject>
    [-TypeName <String>]
    [-Force]
    [-PassThru]
    [<CommonParameters>]

MemberSet

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

Описание

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

Чтобы использовать , передайте объект в или используйте параметр inputObject 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

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

Первая команда использует командлет для получения объекта FileInfo , представляющего файл . Он сохраняет его в переменной $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

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

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

Вторая команда добавляет свойство псевдонима 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, которая использует статический метод раунда из типа для округления размера файла до второго десятичного разряда.

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

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

$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. Создание пользовательского объекта

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

Командлет New-Object создает PSObject, сохраненный в переменной $Asset. Ускоритель типов [ordered] создает упорядоченный словарь, хранящийся в переменной $d. Пипсинг $Asset для Add-Member добавляет пары "ключ-значение" в словарь к объекту в виде элементов NoteProperty. параметр TypeName назначает тип AssetPSObject. Командлет Get-Member показывает тип и свойства объекта. Однако свойства перечислены в алфавитном порядке, а не в порядке их добавления.

$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 -MemberType Properties
   TypeName: Asset

Name        MemberType   Definition
----        ----------   ----------
Name        NoteProperty string Name=Server30
PSVersion   NoteProperty string PSVersion=4.0
System      NoteProperty string System=Server Core
$Asset.psobject.Properties | Format-Table Name, MemberType, TypeNameOfValue, Value
Name        MemberType TypeNameOfValue Value
----        ---------- --------------- -----
Name      NoteProperty System.String   Server30
System    NoteProperty System.String   Server Core
PSVersion NoteProperty System.String   4.0

При проверке необработанного списка свойств отображаются свойства в порядке их добавления в объект. Format-Table используется в этом примере для создания выходных данных, аналогичных Get-Member.

Пример 6. Добавление ПсевдонимаProperty в объект

В этом примере мы создадим пользовательский объект, содержащий два элемента NoteProperty. Тип NoteProperty отражает тип значения, хранящегося в свойстве. В этом случае свойство age является строкой.

$user = [pscustomobject]@{
    Name = 'Doris'
    Age = '20'
}
$addMemberSplat = @{
    MemberType = 'AliasProperty'
    Name = 'IntAge'
    Value = 'Age'
    SecondValue = 'UInt32'
}
$user | Add-Member @addMemberSplat
$user | Get-Member
   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType    Definition
----        ----------    ----------
IntAge      AliasProperty IntAge = (System.UInt32)Age
Equals      Method        bool Equals(System.Object obj)
GetHashCode Method        int GetHashCode()
GetType     Method        type GetType()
ToString    Method        string ToString()
Age         NoteProperty  string Age=20
Name        NoteProperty  string Name=Doris
PS> $obj

Name  Age IntAge
----  --- ------
Doris 20      20

PS> $obj.Age + 1

201

PS> $obj.IntAge + 1

21

Свойство IntAge является псевдонимом AliasProperty для свойства Age, но тип гарантированно будет uint32.

Пример 7. Добавление методов получения и задания в пользовательский объект

В этом примере показано, как определить Get и Set методы, которые обращаются к глубоко вложенным свойствам.

$user = [pscustomobject]@{
    Name      = 'User1'
    Age       = 29
    StartDate = [datetime]'2019-05-05'
    Position  = [pscustomobject]@{
        DepartmentName = 'IT'
        Role = 'Manager'
    }
}
$addMemberSplat = @{
    MemberType = 'ScriptProperty'
    Name = 'Title'
    Value = { $this.Position.Role }                  # getter
    SecondValue = { $this.Position.Role = $args[0] } # setter
}
$user | Add-Member @addMemberSplat
$user | Get-Member
   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType     Definition
----        ----------     ----------
Equals      Method         bool Equals(System.Object obj)
GetHashCode Method         int GetHashCode()
GetType     Method         type GetType()
ToString    Method         string ToString()
Age         NoteProperty   int Age=29
Name        NoteProperty   string Name=User1
Position    NoteProperty   System.Management.Automation.PSCustomObject Position=@{DepartmentName=IT; Role=Manager}
StartDate   NoteProperty   datetime StartDate=5/5/2019 12:00:00 AM
Title       ScriptProperty System.Object Title {get= $this.Position.Role ;set= $this.Position.Role = $args[0] ;}
$user.Title = 'Dev Manager'
Name      : User1
Age       : 29
StartDate : 5/5/2019 12:00:00 AM
Position  : @{DepartmentName=IT; Role=Dev Manager}
Title     : Dev Manager

Обратите внимание, что свойство Title является ScriptProperty с Методом Get и Set. При назначении нового значения свойству title вызывается метод set и изменяет значение свойства role в свойстве Position.

Параметры

-Force

По умолчанию Add-Member не может добавить новый элемент, если объект уже имеет элемент с тем же элементом. При использовании параметра ForceAdd-Member заменяет существующий элемент новым элементом. Невозможно использовать параметр Force для замены стандартного члена типа.

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

MemberSet
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False
NotePropertySingleMemberSet
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False
NotePropertyMultiMemberSet
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-InputObject

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

Свойства параметра

Тип:PSObject
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-MemberType

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

  • ПсевдонимProperty
  • CodeMethod
  • CodeProperty
  • ПримечаниеСвойство
  • ScriptMethod
  • ScriptProperty

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

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

Свойства параметра

Тип:PSMemberTypes
Default value:None
Допустимые значения:AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:Тип

Наборы параметров

MemberSet
Position:0
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Name

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

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

MemberSet
Position:1
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-NotePropertyMembers

Задает хэш-словарь или упорядоченный словарь, содержащий пару "ключ-значение", представляющую имена NoteProperty и их значения. Дополнительные сведения о хэш-таблицах и упорядоченных словарях в PowerShell см. в about_Hash_Tables.

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

Свойства параметра

Тип:IDictionary
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

NotePropertyMultiMemberSet
Position:0
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-NotePropertyName

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

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

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

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

NotePropertySingleMemberSet
Position:0
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-NotePropertyValue

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

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

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

Свойства параметра

Тип:Object
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

NotePropertySingleMemberSet
Position:1
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-PassThru

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

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

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

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-SecondValue

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

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

Для CodePropertyзначение должно быть ссылкой на метод, реализующий метод доступа Set. Используйте метод GetMethod() ссылки типа, чтобы получить ссылку на метод. Метод должен принимать один параметр, который является PSObject. Метод доступа Get назначается с помощью параметра Value.

Для ScriptPropertyзначение должно быть блоком скрипта, реализующим метод доступа Set. Метод доступа Get назначается с помощью параметра Value.

Свойства параметра

Тип:Object
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

MemberSet
Position:3
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-TypeName

Задает имя типа.

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

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

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

TypeNameSet
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False
NotePropertyMultiMemberSet
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False
NotePropertySingleMemberSet
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False
MemberSet
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Value

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

  • Для AliasPropertyзначение должно быть именем псевдонима свойства.
  • Для CodeMethodзначение должно быть ссылкой на метод. Используйте метод GetMethod() ссылки типа, чтобы получить ссылку на метод.
  • Для CodePropertyзначение должно быть ссылкой на метод, реализующий метод доступа Get. Используйте метод GetMethod() ссылки типа, чтобы получить ссылку на метод. ссылка. Метод должен принимать один параметр, который является PSObject. Метод доступа Set назначается с помощью параметра SecondValue.
  • Для ScriptMethodзначение должно быть блоком скрипта.
  • Для ScriptPropertyзначение должно быть блоком скрипта, реализующим метод доступа Get. Метод доступа Set назначается с помощью параметра SecondValue.

Свойства параметра

Тип:Object
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

MemberSet
Position:2
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

PSObject

Вы можете передать любой объект в этот cmdlet.

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

None

По умолчанию этот командлет не возвращает выходные данные.

Object

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

Примечания

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

объекты типа PSObject поддерживают их список элементов в том порядке, в который были добавлены члены.

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

Если вы включаете имена параметров, параметры могут отображаться в любом порядке.

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