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
. Как видно из выходных данных, значение равно 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 note добавляется в строку. Так как 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. Create пользовательского объекта
В этом примере создается пользовательский объект Asset .
Командлет New-Object
создает PSObject , сохраненный в переменной $Asset
. Ускоритель [ordered]
типов создает упорядоченный словарь, хранящийся в переменной $d
.
$Asset
Конвейер для Add-Member
добавляет пары "ключ-значение" в словаре в объект в качестве членов NoteProperty. Параметр TypeName назначает тип Asset
PSObject. Командлет 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. Добавление свойства AliasProperty в объект
В этом примере мы создадим пользовательский объект, содержащий два члена 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 Age intAge
---- --- ------
Doris 20 20
PS> $obj.Age + 1
201
PS> $obj.intAge + 1
21
Свойство intAge является AliasProperty для свойства Age , но тип гарантированно будет иметь значение uint32.
Пример 7. Добавление методов get и set в пользовательский объект
В этих примерах показано, как определить методы 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 нельзя использовать для замены стандартного члена типа.
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
Указывает тип добавляемого элемента. Это обязательный параметр. Допустимые значения для этого параметра:
- ПсевдонимСвойства
- CodeMethod
- CodeProperty
- ПримечаниеСвойство
- ScriptMethod
- ScriptProperty
Дополнительные сведения об этих значениях см. в статье Перечисление PSMemberTypes в пакете SDK для PowerShell.
Не у всех объектов имеются члены всех типов. Если указать тип элемента, который отсутствует у объекта, PowerShell возвращает ошибку.
Type: | PSMemberTypes |
Aliases: | Type |
Accepted values: | AliasProperty, CodeMethod, CodeProperty, NoteProperty, ScriptMethod, ScriptProperty |
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
Указывает хэш-таблицы или упорядоченный словарь, содержащий пару "ключ-значение", представляющую имена NoteProperty и их значения. Дополнительные сведения о хэш-таблицах и упорядоченных словарях в 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 .
Если этот параметр используется при добавлении AliasProperty, этот параметр должен быть типом данных. Преобразование в указанный тип данных добавляется к значению AliasProperty. Например, если добавить псевдоним, предоставляющий альтернативное имя строкового свойства, можно также указать параметр SecondValuesystem.Int32 , чтобы указать, что значение этого строкового свойства должно быть преобразовано в целое число при обращении с помощью соответствующего AliasProperty.
Для CodeProperty значение должно быть ссылкой на метод, реализующий метод доступа Set . GetMethod()
Используйте метод ссылки на тип, чтобы получить ссылку на метод . Метод должен принимать один параметр, который является PSObject. Метод доступа Get назначается с помощью параметра Value .
Для Свойства ScriptProperty значением должен быть блок скрипта, реализующий метод доступа Set . Метод доступа Get назначается с помощью параметра Value .
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 можно указать дополнительные сведения с помощью параметра SecondValue .
- Для AliasProperty значением должно быть имя псевдонимируемого свойства.
- Для CodeMethod значение должно быть ссылкой на метод .
GetMethod()
Используйте метод ссылки на тип, чтобы получить ссылку на метод . - Для CodeProperty значение должно быть ссылкой на метод, реализующий метод доступа Get .
GetMethod()
Используйте метод ссылки на тип, чтобы получить ссылку на метод . Ссылки. Метод должен принимать один параметр, который является PSObject. Метод доступа Set назначается с помощью параметра SecondValue . - Для ScriptMethod значением должен быть блок скрипта.
- Для Свойства ScriptProperty значением должен быть блок скрипта, реализующий метод доступа Get . Метод доступа Set назначается с помощью параметра SecondValue .
Type: | Object |
Position: | 2 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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.