Add-Member
Adiciona propriedades e métodos personalizados a uma instância de um objeto do PowerShell.
Sintaxe
TypeNameSet (Predefinição)
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>]
Description
O cmdlet Add-Member permite adicionar membros (propriedades e métodos) a uma instância de um objeto do PowerShell. Por exemplo, você pode adicionar um membro NoteProperty que contém uma descrição do objeto ou um ScriptMethod membro que executa um script para alterar o objeto.
Para usar Add-Member, canalize o objeto para Add-Memberou use o parâmetro InputObject para especificar o objeto.
O parâmetro MemberType indica o tipo de membro que você deseja adicionar. O parâmetro Name atribui um nome ao novo membro e o parâmetro Value define o valor do membro.
As propriedades e métodos que você adiciona são adicionados somente à instância específica do objeto que você especificar.
Add-Member não altera o tipo de objeto. Para criar um novo tipo de objeto, use o cmdlet Add-Type.
Você também pode usar o cmdlet Export-Clixml para salvar a instância do objeto, incluindo os membros adicionais, em um arquivo. Em seguida, você pode usar o cmdlet Import-Clixml para recriar a instância do objeto a partir das informações armazenadas no arquivo exportado.
A partir do Windows PowerShell 3.0, Add-Member tem novos recursos que facilitam a adição de propriedades de anotação a objetos.
Você pode usar o
Além disso, a partir do Windows PowerShell 3.0, o parâmetro PassThru, que gera um objeto de saída, é necessário com menos frequência.
Add-Member agora adiciona os novos membros diretamente ao objeto de entrada de mais tipos. Para obter mais informações, consulte a PassThru descrição do parâmetro.
Exemplos
Exemplo 1: Adicionar uma propriedade note a um PSObject
O exemplo a seguir adiciona uma propriedade de Status note com um valor de "Done" ao objeto FileInfo que representa o arquivo Test.txt.
O primeiro comando usa o cmdlet Get-ChildItem para obter um objeto FileInfo que representa o arquivo Test.txt. Salva-o na variável $a.
O segundo comando adiciona a propriedade note ao objeto em $a.
O terceiro comando usa notação de ponto para obter o valor da propriedade Status
$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done
Exemplo 2: Adicionar uma propriedade alias a um PSObject
O exemplo a seguir adiciona uma propriedade Size alias ao objeto que representa o arquivo Test.txt. A nova propriedade é um alias para a propriedade Length.
O primeiro comando usa o cmdlet Get-ChildItem para obter o Test.txtFileInfo objeto.
O segundo comando adiciona a propriedade Tamanho alias. O terceiro comando usa notação de ponto para obter o valor da nova propriedade Size.
$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394
Exemplo 3: Adicionar uma propriedade de nota StringUse a uma cadeia de caracteres
Este exemplo adiciona a propriedade StringUse note a uma cadeia de caracteres.
Como Add-Member não pode adicionar tipos a String objetos de entrada, você pode especificar o parâmetro PassThru para gerar um objeto de saída. O último comando no exemplo exibe a nova propriedade.
Este exemplo usa o parâmetro NotePropertyMembers. O valor do parâmetro
$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display
Exemplo 4: Adicionar um método de script a um objeto FileInfo
Este exemplo adiciona o método de script [math] para arredondar o tamanho do arquivo para a segunda casa decimal.
O parâmetro Value também usa a variável automática $This, que representa o objeto atual. A variável $This é válida apenas em blocos de script que definem novas propriedades e métodos.
O último comando usa notação de ponto para chamar o novo SizeInMB método de script no objeto na variável $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
Exemplo 5: Copiar todas as propriedades de um objeto para outro
Esta função copia todas as propriedades de um objeto para outro objeto.
O loop de foreach usa o cmdlet Get-Member para obter cada uma das propriedades do objeto From. Os comandos dentro do loop foreach são executados em série em cada uma das propriedades.
O comando Add-Member adiciona a propriedade do objeto From ao objeto To como um NoteProperty. O valor é copiado usando o parâmetro Value. Ele usa o parâmetro Force para adicionar membros com o mesmo nome de membro.
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
}
}
Exemplo 6: Criar um objeto personalizado
Este exemplo cria um Asset objeto personalizado.
O cmdlet New-Object cria um PSObject. O exemplo salva o PSObject na variável $Asset.
O segundo comando usa o acelerador de tipo [ordered] para criar um dicionário ordenado de nomes e valores. O comando salva o resultado na variável $D.
O terceiro comando usa o parâmetro
O último comando canaliza o novo objeto Asset para o cmdlet Get-Member. A saída mostra que o objeto tem um nome de tipo de Asset e as propriedades de nota que definimos no dicionário ordenado.
$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
Parâmetros
-Force
Indica que esse cmdlet adiciona um novo membro, mesmo que o objeto tenha um membro personalizado com o mesmo nome. Não é possível usar o parâmetro Force para substituir um membro padrão de um tipo.
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
NotePropertyMultiMemberSet
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
NotePropertySingleMemberSet
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
MemberSet
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-InputObject
Especifica o objeto ao qual o novo membro é adicionado. Insira uma variável que contenha os objetos ou digite um comando ou expressão que obtenha os objetos.
Propriedades dos parâmetros
| Tipo: | PSObject |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | True |
| Valor do pipeline: | True |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-MemberType
Especifica o tipo de membro a ser adicionado. Este parâmetro é obrigatório. Os valores aceitáveis para este parâmetro são:
- ObservaçãoPropriedade
- AliasProperty
- ScriptProperty
- CodeProperty
- ScriptMethod
- CodeMethod
Para obter informações sobre esses valores, consulte de enumeração PSMemberTypes na biblioteca MSDN.
Nem todos os objetos têm todos os tipos de membros. Se você especificar um tipo de membro que o objeto não tem, o PowerShell retornará um erro.
Propriedades dos parâmetros
| Tipo: | PSMemberTypes |
| Default value: | None |
| Valores aceites: | AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
| Aliases: | Tipo |
Conjuntos de parâmetros
MemberSet
| Position: | 0 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Name
Especifica o nome do membro que este cmdlet adiciona.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
MemberSet
| Position: | 1 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-NotePropertyMembers
Especifica uma tabela de hash ou dicionário ordenado de nomes e valores de propriedades de nota. Digite uma tabela de hash ou dicionário no qual as chaves são nomes de propriedade note e os valores são valores de propriedade note.
Para obter mais informações sobre tabelas de hash e dicionários ordenados no PowerShell, consulte about_Hash_Tables.
Esse parâmetro foi introduzido no Windows PowerShell 3.0.
Propriedades dos parâmetros
| Tipo: | IDictionary |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
NotePropertyMultiMemberSet
| Position: | 0 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-NotePropertyName
Especifica o nome da propriedade note.
Use esse parâmetro com o parâmetro NotePropertyValue. Este parâmetro é opcional.
Esse parâmetro foi introduzido no Windows PowerShell 3.0.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
NotePropertySingleMemberSet
| Position: | 0 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-NotePropertyValue
Especifica o valor da propriedade note.
Use esse parâmetro com o parâmetro NotePropertyName. Este parâmetro é opcional.
Esse parâmetro foi introduzido no Windows PowerShell 3.0.
Propriedades dos parâmetros
| Tipo: | Object |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
NotePropertySingleMemberSet
| Position: | 1 |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-PassThru
Retorna um objeto que representa o item com o qual você está trabalhando. Por padrão, esse cmdlet não gera nenhuma saída.
Para a maioria dos objetos, Add-Member adiciona os novos membros ao objeto de entrada.
No entanto, quando o objeto de entrada é uma cadeia de caracteres, Add-Member não pode adicionar o membro ao objeto de entrada.
Para esses objetos, use o parâmetro PassThru para criar um objeto de saída.
No Windows PowerShell 2.0, Add-Member adicionado membros somente ao PSObject wrapper de objetos, não ao objeto.
Use o parâmetro
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-SecondValue
Especifica informações adicionais opcionais sobre AliasProperty, ScriptProperty, CodePropertyou CodeMethod membros.
Se usado ao adicionar um AliasProperty, esse parâmetro deve ser um tipo de dados. Uma conversão para o tipo de dados especificado é adicionada ao valor do AliasProperty.
Por exemplo, se você adicionar um AliasProperty que fornece um nome alternativo para uma propriedade string, você também pode especificar um SecondValue parâmetro de System.Int32 para indicar que o valor dessa propriedade string deve ser convertido em um inteiro quando acessado usando o correspondente AliasProperty.
Você pode usar o
Propriedades dos parâmetros
| Tipo: | Object |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
MemberSet
| Position: | 3 |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-TypeName
Especifica um nome para o tipo.
Quando o tipo é uma classe no namespace System ou um tipo que tem um acelerador de tipo, você pode inserir o nome abreviado do tipo. Caso contrário, o nome completo do tipo é necessário. Esse parâmetro é efetivo somente quando o InputObject é um PSObject.
Esse parâmetro foi introduzido no Windows PowerShell 3.0.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
TypeNameSet
| Position: | Named |
| Obrigatório: | True |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
NotePropertyMultiMemberSet
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
NotePropertySingleMemberSet
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
MemberSet
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Value
Especifica o valor inicial do membro adicionado.
Se você adicionar um
Propriedades dos parâmetros
| Tipo: | Object |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
MemberSet
| Position: | 2 |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
CommonParameters
Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.
Entradas
PSObject
Você pode canalizar qualquer tipo de objeto para este cmdlet.
Saídas
None or System.Object
Quando você usa o parâmetro PassThru, esse cmdlet retorna o objeto recém-estendido. Caso contrário, esse cmdlet não gerará nenhuma saída.
Notas
Você pode adicionar membros somente a objetos PSObject. Para determinar se um objeto é um objeto PSObject
Por exemplo, para testar um objeto armazenado na variável $obj, digite $obj -is [PSObject].
Os nomes dos parâmetros MemberType, Name, Valuee SecondValue são opcionais. Se você omitir os nomes dos parâmetros, os valores de parâmetros sem nome deverão aparecer nesta ordem: MemberType, Name, Valuee SecondValue.
Se você incluir os nomes dos parâmetros, os parâmetros poderão aparecer em qualquer ordem.
Você pode usar a variável automática $this em blocos de script que definem os valores de novas propriedades e métodos.
A variável $this refere-se à instância do objeto ao qual as propriedades e métodos estão sendo adicionados. Para obter mais informações sobre a variável $this, consulte about_Automatic_Variables.