Pregunta

estados Documentación:

  

Agrega un miembro personalizado definido por el usuario   una instancia de una de Windows PowerShell   objeto.

Lo que "Windows PowerShell objeto" significa?

Esto funciona bien:

$obj = new-object system.object
$obj | add-member -membertype noteproperty -name Name -value "OK"
$obj.name

Pero esto no es así:

$obj = @{}

En realidad, estoy tratando de añadir una propiedad a $ error [0].

¿Fue útil?

Solución

PowerShell tiene lo que se llama un PSObject que es una envoltura alrededor de cualquier objeto .NET (o puede ser un objeto totalmente personalizado) y cuando se llama Add-miembros, PowerShell está terminando implícitamente el objeto .NET real con un PSObject.

La forma en que funciona Add-miembro depende de si está o no empezar con un PSObject. Si usted no comenzó con un PSObject, Add-Miembro envolverá la entrada en un PSObject y se le tenga que volver a asignar a la variable con el fin de ver el objeto adaptado.

Así, por ejemplo:

$x = [Environment]::OSVersion
$x | Add-Member NoteProperty IsVista $true
$x | Format-List   # does not show the new property

Esto se debe a que no se ajusta OSVersion es un PSObject. Añadir-miembro hace lo envuelve, sino que la envoltura se pierde porque no estás re-asignación de $ x para el objeto envuelto. Contrasta con este comportamiento:

$x = New-Object OperatingSystem ('Win32NT', '6.0')
$x | Add-Member NoteProperty IsVista $true
$x | Format-List   # DOES show the new property

Esto se debe a New-Object envuelve implícitamente la nueva instancia en un PSObject. Así que su llamada Add-Member es la adición de miembros a la envoltura existente.

Volviendo al primer ejemplo, se puede hacer que funcione como se esperaba cambiándola a:

$x = [Environment]::OSVersion
$x = $x | Add-Member NoteProperty IsVista $true -PassThru
$x | Format-List   # DOES show the new property

Ahora, después de todo eso, la razón por la que la tabla hash no funciona de la forma esperada es porque Hashtables son tratados especial por PowerShell y, básicamente, el adaptador de tablas hash utiliza las teclas como propiedades (un poco) y Add-miembros no funcionará como se espera con este tipo de objeto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top