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
. Как показано в выходных данных, значение "Готово".
$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
не удается добавить типы в входные объекты 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. Создание пользовательского объекта
В этом примере создается пользовательский объект Asset .
Командлет New-Object
создает PSObject. В этом примере файл PSObject сохраняется в переменной $Asset
.
Вторая команда использует ускоритель [ordered]
типов для создания упорядоченного словаря имен и значений. Команда сохраняет результат в переменной $D
.
Третья команда использует параметр NotePropertyMembers командлета Add-Member
для добавления словаря в переменную в $D
PSObject.
Свойство TypeName присваивает новому имени, ресурсуPSObject.
Последняя команда передает новый объект 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
Указывает тип добавляемого элемента. Это обязательный параметр. Допустимые значения для этого параметра:
- NoteProperty
- 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.