Compartir a través de


Add-Member

Agrega propiedades y métodos personalizados a una instancia de un objeto de PowerShell.

Sintaxis

TypeNameSet (valor predeterminado)

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

El cmdlet Add-Member permite agregar miembros (propiedades y métodos) a una instancia de un objeto de PowerShell. Por ejemplo, puede agregar un miembro NoteProperty que contenga una descripción del objeto o un miembro ScriptMethod que ejecuta un script para cambiar el objeto.

Para usar , canalice el objeto para o use el parámetro inputObject de para especificar el objeto.

El parámetro MemberType indica el tipo de miembro que desea agregar. El parámetro Name asigna un nombre al nuevo miembro y el parámetro Value establece el valor del miembro.

Las propiedades y los métodos que agregue solo se agregan a la instancia concreta del objeto que especifique. Add-Member no cambia el tipo de objeto. Para crear un nuevo tipo de objeto, use el cmdlet Add-Type.

También puede usar el cmdlet Export-Clixml para guardar la instancia del objeto, incluidos los miembros adicionales, en un archivo. A continuación, puede usar el cmdlet Import-Clixml para volver a crear la instancia del objeto a partir de la información almacenada en el archivo exportado.

A partir de Windows PowerShell 3.0, Add-Member tiene nuevas características que facilitan la adición de propiedades de nota a objetos. Puede usar los parámetros NotePropertyName y NotePropertyValue para definir una propiedad note o usar el parámetro NotePropertyMembers, que toma una tabla hash de valores y nombres de propiedad de nota.

Además, a partir de Windows PowerShell 3.0, el parámetro PassThru, que genera un objeto de salida, se necesita con menos frecuencia. Add-Member ahora agrega los nuevos miembros directamente al objeto de entrada de más tipos. Para obtener más información, consulte la descripción del parámetro PassThru.

Ejemplos

Ejemplo 1: Agregar una propiedad note a un PSObject

En el ejemplo siguiente se agrega una propiedad status status con un valor "Done" al objeto fileInfo que representa el archivo .

El primer comando usa el cmdlet Get-ChildItem para obtener un objeto FileInfo que representa el archivo Test.txt. Lo guarda en la variable $a.

El segundo comando agrega la propiedad note al objeto en $a.

El tercer comando usa la notación de puntos para obtener el valor de la propiedad Status del objeto en . Como se muestra en la salida, el valor es "Listo".

$A = Get-ChildItem c:\ps-test\test.txt
$A | Add-Member -NotePropertyName Status -NotePropertyValue Done
$A.Status
Done

Ejemplo 2: Agregar una propiedad de alias a un PSObject

En el ejemplo siguiente se agrega una propiedad de alias size de al objeto que representa el archivo . La nueva propiedad es un alias para la propiedad Length.

El primer comando usa el cmdlet Get-ChildItem para obtener el Test.txtobjeto FileInfo.

El segundo comando agrega la propiedad Size alias. El tercer comando usa la notación de puntos para obtener el valor de la nueva propiedad Size.

$A = Get-ChildItem C:\Temp\test.txt
$A | Add-Member -MemberType AliasProperty -Name Size -Value Length
$A.Size
2394

Ejemplo 3: Agregar una propiedad stringUse note a una cadena

En este ejemplo se agrega la propiedad stringUse a una cadena. Dado que Add-Member no puede agregar tipos a objetos de entrada string, puede especificar el parámetro PassThru para generar un objeto de salida. El último comando del ejemplo muestra la nueva propiedad.

En este ejemplo se usa el parámetro NotePropertyMembers. El valor del parámetro NotePropertyMembers es una tabla hash. La clave es el nombre de la propiedad note, StringUsey el valor es el valor de la propiedad note, Display.

$A = "A string"
$A = $A | Add-Member -NotePropertyMembers @{StringUse="Display"} -PassThru
$A.StringUse
Display

Ejemplo 4: Agregar un método de script a un objeto FileInfo

En este ejemplo se agrega el método de script SizeIn MB a un objeto FileInfo que calcula el tamaño del archivo al megabyte más cercano. El segundo comando crea un scriptBlock de que usa el método estático round del tipo para redondear el tamaño del archivo al segundo decimal.

El parámetro Value también usa la variable automática $This, que representa el objeto actual. La variable $This solo es válida en bloques de script que definen nuevas propiedades y métodos.

El último comando usa la notación de puntos para llamar al nuevo método de script SizeInMB en el objeto de la variable $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

Ejemplo 5: Copiar todas las propiedades de un objeto en otro

Esta función copia todas las propiedades de un objeto en otro objeto.

El bucle foreach usa el cmdlet Get-Member para obtener cada una de las propiedades del objeto From. Los comandos del bucle foreach se realizan en serie en cada una de las propiedades.

El comando Add-Member agrega la propiedad del objeto From al objeto To como NoteProperty. El valor se copia mediante el parámetro Value. Usa el parámetro Force para agregar miembros con el mismo nombre de miembro.

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
    }
}

Ejemplo 6: Creación de un objeto personalizado

En este ejemplo se crea un Asset objeto personalizado.

El cmdlet crea unPSObject . En el ejemplo se guarda el PSObject en la variable $Asset.

El segundo comando usa el acelerador de tipos [ordered] para crear un diccionario ordenado de nombres y valores. El comando guarda el resultado en la variable $D.

El tercer comando usa el parámetro NotePropertyMembers del cmdlet Add-Member para agregar el diccionario en la variable $D al PSObject. La propiedad TypeName asigna un nuevo nombre, Asset, alPSObject de .

El último comando canaliza el nuevo objeto Asset al cmdlet Get-Member. La salida muestra que el objeto tiene un nombre de tipo de Asset y las propiedades de nota que definimos en el diccionario 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 este cmdlet agrega un nuevo miembro incluso el objeto tiene un miembro personalizado con el mismo nombre. No puede usar el parámetro Force para reemplazar un miembro estándar de un tipo.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

NotePropertyMultiMemberSet
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False
NotePropertySingleMemberSet
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False
MemberSet
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-InputObject

Especifica el objeto al que se agrega el nuevo miembro. Escriba una variable que contenga los objetos, o escriba un comando o expresión que obtenga los objetos.

Propiedades de parámetro

Tipo:PSObject
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:True
Valor de la canalización:True
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-MemberType

Especifica el tipo del miembro que se va a agregar. Este parámetro es obligatorio. Los valores aceptables para este parámetro son:

  • NoteProperty
  • AliasProperty
  • ScriptProperty
  • CodeProperty
  • ScriptMethod
  • CodeMethod

Para obtener información sobre estos valores, vea enumeración PSMemberTypes en MSDN Library.

No todos los objetos tienen todos los tipos de miembro. Si especifica un tipo de miembro que el objeto no tiene, PowerShell devuelve un error.

Propiedades de parámetro

Tipo:PSMemberTypes
Valor predeterminado:None
Valores aceptados:AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All
Admite caracteres comodín:False
DontShow:False
Alias:Tipo

Conjuntos de parámetros

MemberSet
Posición:0
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Name

Especifica el nombre del miembro que agrega este cmdlet.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

MemberSet
Posición:1
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-NotePropertyMembers

Especifica una tabla hash o un diccionario ordenado de nombres y valores de propiedades de nota. Escriba una tabla o diccionario hash en la que las claves son nombres de propiedad de nota y los valores son valores de propiedad de nota.

Para obtener más información sobre las tablas hash y los diccionarios ordenados en PowerShell, consulte about_Hash_Tables.

Este parámetro se introdujo en Windows PowerShell 3.0.

Propiedades de parámetro

Tipo:IDictionary
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

NotePropertyMultiMemberSet
Posición:0
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-NotePropertyName

Especifica el nombre de la propiedad de nota.

Use este parámetro con el parámetro NotePropertyValue. Este parámetro es opcional.

Este parámetro se introdujo en Windows PowerShell 3.0.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

NotePropertySingleMemberSet
Posición:0
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-NotePropertyValue

Especifica el valor de la propiedad note.

Use este parámetro con el parámetro NotePropertyName. Este parámetro es opcional.

Este parámetro se introdujo en Windows PowerShell 3.0.

Propiedades de parámetro

Tipo:Object
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

NotePropertySingleMemberSet
Posición:1
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-PassThru

Devuelve un objeto que representa el elemento con el que está trabajando. De forma predeterminada, este cmdlet no genera ninguna salida.

Para la mayoría de los objetos, Add-Member agrega los nuevos miembros al objeto de entrada. Sin embargo, cuando el objeto de entrada es una cadena, Add-Member no puede agregar el miembro al objeto de entrada. Para estos objetos, use el parámetro PassThru para crear un objeto de salida.

En Windows PowerShell 2.0, Add-Member agregar miembros solo al contenedor psObject de objetos, no al objeto . Use el parámetro PassThru para crear un objeto de salida para cualquier objeto que tenga un contenedor de PSObject de .

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-SecondValue

Especifica información adicional opcional sobre AliasProperty, , CodePropertyo miembros de CodeMethod.

Si se usa al agregar un AliasProperty, este parámetro debe ser un tipo de datos. Se agrega una conversión al tipo de datos especificado al valor del AliasProperty.

Por ejemplo, si agrega un AliasProperty de que proporciona un nombre alternativo para una propiedad de cadena, también puede especificar un parámetro SecondValue de System.Int32 para indicar que el valor de esa propiedad de cadena debe convertirse en un entero cuando se tenga acceso a él mediante el AliasProperty correspondiente.

Puede usar el parámetro SecondValue para especificar un ScriptBlock adicional al agregar un miembro ScriptProperty. El primer ScriptBlock, especificado en el parámetro Value de , se usa para obtener el valor de una variable. El segundo ScriptBlock, especificado en el parámetro SecondValue, se usa para establecer el valor de una variable.

Propiedades de parámetro

Tipo:Object
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

MemberSet
Posición:3
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-TypeName

Especifica un nombre para el tipo.

Cuando el tipo es una clase del espacio de nombres de System o un tipo que tiene un acelerador de tipos, puede escribir el nombre corto del tipo. De lo contrario, se requiere el nombre de tipo completo. Este parámetro solo es efectivo cuando el InputObject es un PSObject.

Este parámetro se introdujo en Windows PowerShell 3.0.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

TypeNameSet
Posición:Named
Obligatorio:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False
NotePropertyMultiMemberSet
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False
NotePropertySingleMemberSet
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False
MemberSet
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Value

Especifica el valor inicial del miembro agregado. Si agrega unAliasProperty , CodeProperty, ScriptProperty o miembro codeMethod, puede proporcionar información opcional y adicional mediante el parámetro SecondValue.

Propiedades de parámetro

Tipo:Object
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

MemberSet
Posición:2
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

CommonParameters

Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.

Entradas

PSObject

Puede canalizar cualquier tipo de objeto a este cmdlet.

Salidas

None or System.Object

Cuando se usa el parámetro passThru, este cmdlet devuelve el objeto recién extendido. De lo contrario, este cmdlet no genera ninguna salida.

Notas

Solo puede agregar miembros a objetos PSObject. Para determinar si un objeto es un objeto PSObject, use el operador -is.

Por ejemplo, para probar un objeto almacenado en la variable $obj, escriba $obj -is [PSObject].

Los nombres de MemberType, Name, Valuey parámetros secondValue son opcionales. Si omite los nombres de parámetro, los valores de parámetro sin nombre deben aparecer en este orden: MemberType, Name, Valuey SecondValue.

Si incluye los nombres de parámetro, los parámetros pueden aparecer en cualquier orden.

Puede usar la variable automática $this en bloques de script que definen los valores de las nuevas propiedades y métodos. La variable $this hace referencia a la instancia del objeto al que se agregan las propiedades y los métodos. Para obtener más información sobre la variable de $this, vea about_Automatic_Variables.