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 |
Входные данные
В этот командлет можно передать объект любого типа.
Выходные данные
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.