Add-Member
Agrega un miembro personalizado definido por el usuario a una instancia de un objeto de Windows PowerShell.
Sintaxis
Add-Member [-MemberType] {<AliasProperty> | <CodeProperty> | <Property> | <NoteProperty> | <ScriptProperty> | <Properties> | <PropertySet> | <Method> | <CodeMethod> | <ScriptMethod> | <Methods> | <ParameterizedProperty> | <MemberSet> | <Event> | <All>} [-Name] <string> -InputObject <psobject> [[-Value] <Object>] [[-SecondValue] <Object>] [-Force] [-PassThru] [<CommonParameters>]
Descripción
El cmdlet Add-Member agrega un miembro personalizado definido por el usuario a una instancia de un objeto de Windows PowerShell. Permite agregar los siguientes tipos de miembros: AliasProperty, CodeProperty, NoteProperty, ScriptProperty, PropertySet, CodeMethod, MemberSet y ScriptMethod. El usuario especifica el valor inicial del miembro mediante el parámetro Value. En el caso de AliasProperty, ScriptProperty, CodeProperty y CodeMethod, se puede proporcionar información adicional a través del parámetro SecondValue.
Los miembros adicionales se agregan a la instancia concreta del objeto que se canaliza a Add-Member o se especifica mediante el parámetro InputObject. El miembro adicional solo estará disponible mientras exista dicha instancia. Puede usar el cmdlet Export-Clixml para guardar la instancia, junto con los miembros adicionales, en un archivo. El cmdlet Import-Clixml puede usar la información almacenada en dicho archivo para crear de nuevo la instancia del objeto.
Parámetros
-Force
Agrega un nuevo miembro aunque ya exista otro con el mismo nombre. No funciona con los miembros principales de un tipo.
¿Requerido? |
false |
¿Posición? |
named |
Valor predeterminado |
|
¿Aceptar canalización? |
false |
¿Aceptar caracteres comodín? |
false |
-InputObject <psobject>
Especifica el objeto al que se agrega el nuevo miembro. Especifique la variable que contiene los objetos, o bien, escriba un comando o una expresión que obtenga los objetos.
¿Requerido? |
true |
¿Posición? |
named |
Valor predeterminado |
|
¿Aceptar canalización? |
true (ByValue) |
¿Aceptar caracteres comodín? |
false |
-MemberType <PSMemberTypes>
Especifica el tipo de miembro que se va a agregar. Este parámetro es obligatorio.
Los valores apropiados para este parámetro son:
-- AliasProperty: una propiedad que define un nuevo nombre para una propiedad existente.
-- CodeMethod: un método que hace referencia a un método estático de una clase de Microsoft .NET Framework.
-- CodeProperty: una propiedad que hace referencia a una propiedad estática de una clase de .NET Framework.
-- MemberSet: una colección predefinida de propiedades y métodos, como PSBase, PSObject y PSTypeNames.
-- Method: un método del objeto subyacente de .NET Framework.
-- NoteProperty: una propiedad con un valor estático.
-- ParameterizedProperty: una propiedad que toma parámetros y valores de parámetro.
-- Property: una propiedad del objeto subyacente de .NET Framework.
-- PropertySet: una colección predefinida de propiedades de objeto.
-- ScriptMethod: un método cuyo valor es el resultado de un script.
-- ScriptProperty: una propiedad cuyo valor es el resultado de un script.
-- All: obtiene todos los tipos de miembro.
-- Methods: obtiene todos los tipos de método del objeto (por ejemplo, method, codemethod, scriptmethod).
-- Properties: obtiene todos los tipos de propiedad del objeto (por ejemplo, property, codeproperty, aliasproperty, scriptproperty).
No todos los objetos tienen cada tipo de miembro. Si especifica un tipo de miembro que el objeto no tiene, Windows PowerShell devuelve un error.
El tipo de miembro Event no es válido para Add-Member.
¿Requerido? |
true |
¿Posición? |
1 |
Valor predeterminado |
|
¿Aceptar canalización? |
false |
¿Aceptar caracteres comodín? |
true |
-Name <string>
Especifica el nombre del miembro que se va a agregar.
Si se omite el nombre del parámetro "Name", el valor del parámetro -Name debe ser el segundo valor de parámetro sin nombre en el comando. Si se incluye el nombre del parámetro, los parámetros pueden aparecer en cualquier orden.
¿Requerido? |
true |
¿Posición? |
2 |
Valor predeterminado |
|
¿Aceptar canalización? |
false |
¿Aceptar caracteres comodín? |
false |
-PassThru
Pasa a la canalización el objeto que se acaba de extender. De forma predeterminada, este cmdlet no genera resultados.
¿Requerido? |
false |
¿Posición? |
named |
Valor predeterminado |
|
¿Aceptar canalización? |
false |
¿Aceptar caracteres comodín? |
false |
-SecondValue <Object>
Especifica información adicional opcional sobre los miembros AliasProperty, ScriptProperty, CodeProperty o CodeMethod. Si se usa al agregar un miembro AliasProperty, este parámetro debe ser un tipo de dato. El valor de AliasProperty se convertirá en el tipo de dato especificado. Por ejemplo, si se agrega un miembro AliasProperty que proporciona un nombre alternativo para una propiedad de cadena, se puede especificar también un parámetro SecondValue de System.Int32 para indicar que el valor de esa propiedad de cadena debe convertirse en un número entero cuando se obtenga acceso a través del miembro AliasProperty correspondiente.
También puede usar el parámetro SecondValue para especificar un bloque de script adicional al agregar un miembro ScriptProperty. En ese caso, el primer ScriptBlock, especificado en el parámetro Value, se utiliza para obtener el valor de una variable. El segundo ScriptBlock, especificado en el parámetro SecondValue, se utiliza para establecer el valor de una variable.
¿Requerido? |
false |
¿Posición? |
4 |
Valor predeterminado |
|
¿Aceptar canalización? |
false |
¿Aceptar caracteres comodín? |
false |
-Value <Object>
Especifica el valor inicial del miembro agregado. Si agrega un miembro AliasProperty, CodeProperty o CodeMethod, puede proporcionar información adicional opcional mediante el parámetro SecondValue.
¿Requerido? |
false |
¿Posición? |
3 |
Valor predeterminado |
|
¿Aceptar canalización? |
false |
¿Aceptar caracteres comodín? |
false |
<CommonParameters>
Este cmdlet admite los parámetros comunes: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer y -OutVariable. Para obtener más información, vea about_Commonparameters.
Entradas y salidas
El tipo de entrada es el tipo de los objetos que se pueden canalizar al cmdlet. El tipo devuelto es el tipo de los objetos que el cmdlet devuelve.
Entradas |
System.Management.Automation.PSObject Puede canalizar cualquier tipo de objeto a Add-Member. |
Salidas |
Ninguno o System.Object Cuando se usa el parámetro PassThru, Add-Member devuelve el objeto que se acaba de extender. En caso contrario, este cmdlet no genera resultados. |
Notas
Solo se pueden agregar miembros a objetos PSObject. Para determinar si un objeto es un objeto PSObject, use el operador "is". Por ejemplo, para comprobar un objeto almacenado en la variable $obj, escriba "$obj -is [PSObject]".
Los nombres de los parámetros MemberType, Name, Value y SecondValue son opcionales. Si omite los nombres de parámetro, los valores de los parámetros sin nombre deben aparecer en este orden: MemberType, Name, Value, SecondValue. Si incluye los nombres de parámetro, los parámetros podrán aparecer en cualquier orden.
Ejemplo 1
C:\PS>$a = (get-childitem)[0]
C:\PS> $a | add-member -membertype noteproperty -name Status -value done
C:\PS> $a | get-member -type noteproperty
TypeName: System.IO.DirectoryInfo
Name MemberType Definition
---- ---------- ----------
PSChildName NoteProperty System.String PSChildName=Co
PSDrive NoteProperty System.Management.Automation
PSIsContainer NoteProperty System.Boolean PSIsContainer
PSParentPath NoteProperty System.String PSParentPath=M
PSPath NoteProperty System.String PSPath=Microso
PSProvider NoteProperty System.Management.Automation
Status NoteProperty System.String Status=done
Descripción
-----------
Estos comandos agregan la propiedad de nota Status a un objeto DirectoryInfo devuelto por Get-ChildItem y le asignan el valor "done".
El primer comando obtiene el primer objeto que Get-Childitem devuelve (índice 0).
El segundo comando agrega la propiedad de nota.
El tercer comando usa un operador de canalización (|) para enviar el objeto actualizado al cmdlet Get-Member. En el resultado se muestra que se ha agregado la propiedad.
Ejemplo 2
C:\PS>$a = (get-childitem)[0]
C:\PS> $a | add-member -membertype aliasproperty -name FileLength -value Length
C:\PS> $a.filelength
Descripción
-----------
Estos comandos agregan la propiedad de alias FileLength a un objeto DirectoryInfo devuelto por Get-ChildItem. La nueva propiedad es un alias de la propiedad Length.
El primer comando obtiene el primer objeto que Get-Childitem devuelve (índice 0).
El segundo comando agrega la propiedad de alias.
El tercer comando devuelve el valor de la nueva propiedad FileLength.
Ejemplo 3
C:\PS>$a = "a string"
C:\PS> $a = $a | add-member -membertype noteproperty -name StringUse -value Display -passthru
C:\PS> $a.StringUse
Descripción
-----------
Estos comandos agregan la propiedad StringUse a una cadena. Dado que la cadena no es un objeto PSObject, se debe incluir el parámetro PassThru en el comando para guardar la cadena extendida en la variable. El último comando del ejemplo muestra la nueva propiedad.
Ejemplo 4
C:\PS>$a = "this is a string"
C:\PS> $a = add-member -inputobject $a -membertype scriptmethod -name words `
-value {$this.split()} -passthru
C:\PS> $a.words()
Descripción
-----------
Estos comandos agregan un método de script a un objeto de cadena. El método de script expone el método Split() de la clase System.String de la biblioteca de clases de .NET Framework para permitir que se devuelvan las distintas palabras de una cadena llamando a un método de identificación de palabras en el objeto de cadena. Tenga en cuenta que se ha especificado el parámetro PassThru para que Add-Member devuelva el objeto de cadena extendido como resultado que se va a almacenar en la variable $a.
Ejemplo 5
C:\PS>$event = get-eventlog -logname system -newest 1
C:\PS> $event.TimeWritten | get-member
C:\PS> add-member -inputobject $event -membertype aliasproperty -name When `
-value TimeWritten -secondvalue System.String
C:\PS> $event.When | get-member
Descripción
-----------
Estos comandos agrega un miembro AliasProperty a un objeto EventLogEntry devuelto por los cmdlets Get-EventLog. El miembro AliasProperty se denomina "When" y es un alias de la propiedad TimeWritten del objeto. El parámetro SecondValue se usa para indicar que el valor de la propiedad debe convertirse al tipo System.String cuando se obtiene acceso a través del miembro AliasProperty (la propiedad TimeWritten es un objeto DateTime).
La primera línea del comando usa el cmdlet Get-EventLog para recuperar el evento más reciente del registro de eventos del sistema y lo almacena en la variable $event.
El segundo comando obtiene acceso a la propiedad TimeWritten de ese evento y la canaliza al cmdlet Get-Member para mostrar que la propiedad es del tipo DateTime. A continuación, se usa Add-Member para agregar un miembro AliasProperty a la instancia del objeto EventLogEntry que está almacenado en la variable $event. El parámetro Name se usa para definir el nombre del nuevo miembro como "When", mientras que el parámetro Value se usa para especificar que se trata de un alias de la propiedad TimeWritten. El parámetro SecondValue se usa para indicar que, cuando se usa este nuevo miembro, el valor que devuelve debe convertirse de su tipo original, System.DateTime, al tipo System.String.
El tercer comando obtiene acceso al nuevo miembro y lo canaliza al cmdlet Get-Member para confirmar que es del tipo System.String.
Ejemplo 6
C:\PS>function Copy-Property ($From, $To)
{
foreach ($p in Get-Member -InputObject $From -MemberType Property)
{
Add-Member -InputObject $To -MemberType NoteProperty -Name $p.Name
-Value $From.$($p.Name) -Force
$To.$($p.Name) = $From.$($p.Name)
}
}
Descripción
-----------
Esta función copia todas las propiedades de un objeto en otro objeto.
El primer comando de la función declara el nombre de función y muestra sus parámetros.
El bucle Foreach utiliza el cmdlet Get-Member para obtener cada una de las propiedades del objeto From. Los comandos dentro del bucle Foreach se ejecutan en serie en cada una de las propiedades.
El comando Add-Member agrega la propiedad del objeto From al objeto To como una propiedad NoteProperty. Utiliza el parámetro Force para que el comando pueda agregar miembros con el mismo nombre.
El último comando de la función asigna a la nueva propiedad el mismo nombre que tiene la propiedad original.