¿Eliminar un miembro de un objeto de PowerShell?


Necesito eliminar un miembro (específicamente, una NoteProperty) de un objeto. ¿Cómo logro esto?

Author: Tohuw, 2013-07-28

4 answers

Select-Object con ExcludeProperty es bueno para eliminar una propiedad de una colección de objetos.

Para eliminar una propiedad de un solo objeto este método podría ser más efectivo:

# new object with properties Test and Foo
$obj = New-Object -TypeName PSObject -Property @{ Test = 1; Foo = 2 }

# remove a property from PSObject.Properties
$obj.PSObject.Properties.Remove('Foo')
 32
Author: Roman Kuzmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-28 06:52:42

No creo que pueda eliminar de un objeto existente, pero puede crear uno filtrado.

$obj = New-Object -TypeName PsObject -Property @{ Test = 1}
$obj | Add-Member -MemberType NoteProperty -Name Foo -Value Bar
$new_obj = $obj | Select-Object -Property Test

O

$obj | Select-Object -Property * -ExcludeProperty Foo

Esto logrará efectivamente el mismo resultado.

 13
Author: Andy Arismendi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-28 04:57:47

Encontré que lo siguiente ayuda si está interesado en eliminar solo una o dos propiedades de un objeto grande. Convierta su objeto en JSON y luego vuelva a un objeto: todas las propiedades se convierten en tipo NoteProperty, momento en el que puede eliminar lo que desee.

   $mycomplexobject = $mycomplexobject | ConvertTo-Json | ConvertFrom-Json

    $mycomplexobject.PSObject.Properties.Remove('myprop')

La conversión a JSON y back crea un PSCustomObject. Tendrá el objeto original expresado y luego podrá eliminarlo según lo desee.

 2
Author: jfosc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-22 14:37:23

Si puede depender del tipo de objeto o colección que desea eliminar. Comúnmente es una colección (array) de objetos como los que puedes obtener de 'import-csv', que puedes hacer fácilmente.

$MyDataCollection = Import-CSV c:\datafiles\ADComputersData.csv
$MyDataCollection
Windows Server : lax2012sql01
IP             : 10.101.77.69
Site           : LAX
OS             : 2012 R2
Notes           : V

Windows Server : sfo2016iis01
IP             : 10.102.203.99
Site           : SFO
OS             : 2012 R2
Notes           : X

El para quitar una propiedad de cada uno de estos:

$MyDataCollection | ForEach { $_.PSObject.Properties.Remove('Notes') }

Windows Server : lax2012sql01
IP             : 10.101.77.69
Site           : LAX
OS             : 2012 R2

Windows Server : sfo2016iis01
IP             : 10.102.203.99
Site           : SFO
OS             : 2012 R2
 0
Author: Ernie M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-15 19:51:56