Retirer un membre d'un objet PowerShell?

je dois enlever un membre (plus précisément, un NoteProperty) d'un objet. Comment puis-je accomplir cela?

25
demandé sur Tohuw 2013-07-28 08:44:30

4 réponses

Select-ObjectExcludeProperty est bon pour enlever une propriété d'une collection d'objets.

Pour la suppression d'une propriété d'un objet unique, cette méthode pourrait être plus efficace:

# 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
répondu Roman Kuzmin 2013-07-28 06:52:42

je ne pense pas que vous pouvez supprimer à partir d'un objet existant, mais vous pouvez créer filtré.

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

Ou

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

cela permettra effectivement d'atteindre le même résultat.

13
répondu Andy Arismendi 2013-07-28 04:57:47

j'ai trouvé les aides suivantes si vous êtes intéressé à enlever juste une ou deux propriétés d'un grand objet. Convertissez votre objet en JSON puis revenez à un objet - toutes les propriétés sont converties en type NoteProperty, à quel point vous pouvez supprimer ce que vous aimez.

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

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

la conversion en JSON et back crée un PSCustomObject. Vous aurez l'objet original exprimé et puis vous pouvez enlever comme désiré.

2
répondu jfosc 2018-04-22 14:37:23

si peut dépendre du type d'objet ou de collection que vous voulez supprimer. Généralement c'est une Collection (tableau) d'objets comme vous pourriez obtenir DE 'import-csv' que vous pouvez le faire assez facilement.

$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

Le but de retirer un bien de chacun de ces éléments:

$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
répondu Ernie M. 2017-06-15 19:51:56