web-dev-qa-db-fra.com

Supprimer un membre d'un objet PowerShell?

J'ai besoin de supprimer un membre (en particulier, une propriété de note) d'un objet. Comment est-ce que j'accomplis ceci?

36
Tohuw

Select-Object avec ExcludeProperty est utile pour supprimer une propriété d'une collection d'objets.

Pour supprimer une propriété d'un seul objet, cette méthode peut ê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')
48
Roman Kuzmin

Je ne pense pas que vous puissiez supprimer d'un objet existant mais vous pouvez en créer un 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'obtenir le même résultat.

16
Andy Arismendi

J'ai trouvé l'aide suivante si vous souhaitez supprimer uniquement 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 inversement crée un PSCustomObject. Vous aurez l'objet d'origine exprimé et vous pourrez ensuite le supprimer comme vous le souhaitez.

2
jfosc

Cela peut dépendre du type d'objet ou de la collection dont vous souhaitez supprimer. Généralement, c'est une collection (tableau) d'objets comme vous pouvez l'obtenir à partir de 'import-csv' que vous pouvez 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

Pour supprimer une propriété 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
Ernie M.