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
В следующем примере добавляется свойство заметки состояния со значением "Готово" в объект 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
В следующем примере в объект, представляющий 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
не удается добавить типы в объекты строковых входных данных, можно указать параметр 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. Создание пользовательского объекта
В этом примере создается пользовательский объект Asset .
Командлет New-Object
создает PSObject , сохраненный в переменной $Asset
. Ускоритель [ordered]
типов создает упорядоченный словарь, хранящийся в переменной $d
.
Piping $Asset
для Add-Member
добавления пар "ключ-значение" в словарь в объект в качестве элементов NoteProperty . Параметр TypeName назначает тип Asset
PSObject. Командлет Get-Member
показывает тип и свойства объекта. Однако свойства перечислены в алфавитном порядке, а не в порядке их добавления.
$Asset = New-Object -TypeName PSObject
$Asset | Add-Member -NotePropertyMembers @{Name="Server30"} -TypeName Asset
$Asset | Add-Member -NotePropertyMembers @{System="Server Core"}
$Asset | Add-Member -NotePropertyMembers @{PSVersion="4.0"}
$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 является строкой.
PS> $obj = [pscustomobject]@{
Name = 'Doris'
Age = '20'
}
PS> $obj | Add-Member -MemberType AliasProperty -Name 'intAge' -Value age -SecondValue uint32
PS> $obj | 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 : Doris
Age : 20
intAge : 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
если объект уже имеет один и тот же элемент.
При использовании параметра Add-Member
Force заменит существующий элемент новым элементом.
Невозможно использовать параметр Force для замены стандартного элемента типа.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-InputObject
Указывает объект, в который добавляется новый член. Введите переменную, которая содержит объекты, или команду или выражение, которое возвращает объекты.
Тип: | PSObject |
Position: | Named |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-MemberType
Указывает тип добавляемого элемента. Этот параметр является обязательным. Допустимые значения для этого параметра:
- ПсевдонимProperty
- CodeMethod
- CodeProperty
- ПримечаниеProperty
- ScriptMethod
- ScriptProperty
Дополнительные сведения об этих значениях см. в разделе Перечисление PSMemberTypes в пакете SDK PowerShell.
Не у всех объектов имеются члены всех типов. Если указать тип члена, который у объекта нет, PowerShell возвращает ошибку.
Тип: | PSMemberTypes |
Aliases: | Type |
Допустимые значения: | AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Name
Указывает имя участника, добавляемого этим командлетом.
Тип: | String |
Position: | 1 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-NotePropertyMembers
Указывает хэш-словарь или упорядоченный словарь, содержащий пару "ключ-значение", представляющую имена NoteProperty и их значения. Дополнительные сведения о хэш-таблицах и упорядоченных словарях в PowerShell см . в about_Hash_Tables.
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | IDictionary |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-NotePropertyName
Указывает имя свойства заметки.
Используйте этот параметр с параметром NotePropertyValue . Это необязательный параметр.
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | String |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-NotePropertyValue
Указывает значение свойства заметки.
Используйте этот параметр с параметром NotePropertyName . Это необязательный параметр.
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | Object |
Position: | 1 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-PassThru
Возвращает объект, представляющий элемент, с которым вы работаете. По умолчанию этот командлет не создает выходные данные.
Для большинства объектов Add-Member
добавляет новые члены в входной объект. Однако, если входной объект является строкой, Add-Member
не удается добавить элемент в входной объект. Для этих объектов используйте параметр PassThru для создания выходного объекта.
В Windows PowerShell 2.0 Add-Member
добавлены элементы только в оболочку PSObject объектов, а не в объект. Используйте параметр PassThru для создания выходного объекта для любого объекта, имеющего оболочку PSObject.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-SecondValue
Указывает необязательные дополнительные сведения о членах AliasProperty, ScriptProperty или CodeProperty.
При добавлении псевдонимаProperty этот параметр должен быть типом данных. Преобразование в указанный тип данных добавляется к значению AliasProperty. Например, если добавить ПсевдонимProperty, предоставляющий альтернативное имя строкового свойства, можно также указать параметр SecondValue System.Int32, чтобы указать, что значение этого строкового свойства должно быть преобразовано в целое число при доступе с помощью соответствующего ПсевдонимаProperty.
Для CodeProperty значение должно быть ссылкой на метод, реализующий метод доступа Set. GetMethod()
Используйте метод ссылки типа, чтобы получить ссылку на метод. Метод должен принимать один параметр, который является PSObject. Метод доступа Get назначается с помощью параметра Value .
Для ScriptProperty значение должно быть блоком скрипта, реализующим метод доступа Set. Метод доступа Get назначается с помощью параметра Value .
Тип: | Object |
Position: | 3 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-TypeName
Указывает имя типа.
Если тип является классом в пространстве имен системы или типе с акселератором типов, можно ввести короткое имя типа. В остальных случаях требуется полное имя типа. Этот параметр действует только в том случае, если inputObject является PSObject.
Этот параметр впервые появился в Windows PowerShell 3.0.
Тип: | String |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Value
Задает исходное значение добавленного члена. При добавлении элемента AliasProperty, CodeProperty или ScriptProperty можно указать дополнительные сведения с помощью параметра SecondValue.
- Для псевдонима AliasProperty значение должно быть именем псевдонима свойства.
- Для CodeMethod значение должно быть ссылкой на метод.
GetMethod()
Используйте метод ссылки типа, чтобы получить ссылку на метод. - Для CodeProperty значение должно быть ссылкой на метод, реализующий метод доступа Get.
GetMethod()
Используйте метод ссылки типа, чтобы получить ссылку на метод. ссылка. Метод должен принимать один параметр, который является PSObject. Метод доступа Set назначается с помощью параметра SecondValue . - Для ScriptMethod значение должно быть блоком скрипта.
- Для ScriptProperty значение должно быть блоком скрипта, реализующим метод доступа Get. Метод доступа Set назначается с помощью параметра SecondValue .
Тип: | Object |
Position: | 2 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
Вы можете передать любой объект в этот командлет.
Выходные данные
None
По умолчанию этот командлет не возвращает выходные данные.
При использовании параметра PassThru этот командлет возвращает новый расширенный объект.
Примечания
Элементы можно добавлять только в объекты типа PSObject . Чтобы определить, является ли объект объектом PSObject , используйте -is
оператор. Например, чтобы проверить объект, хранящийся в переменной $obj
, введите $obj -is [psobject]
.
Объекты типов PSObject поддерживают их список элементов в том порядке, в который были добавлены члены.
Имена параметров MemberType, Name, Value и SecondValue являются необязательными. Если имена параметров опущены, значения неименованных параметров должны отображаться в этом порядке: MemberType, Name, Value и SecondValue.
При указании имен параметры могут следовать в любом порядке.
Вы можете использовать автоматическую $this
переменную в блоках скриптов, определяющих значения новых свойств и методов. Переменная $this
ссылается на экземпляр объекта, к которому добавляются свойства и методы. Дополнительные сведения об переменной $this
см. в about_Automatic_Variables.
Связанные ссылки
PowerShell