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