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?
4 réponses
Select-Object
ExcludeProperty
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')
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.
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é.
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