2013-07-28 16 views

risposta

30

Select-Object con ExcludeProperty è utile per rimuovere una proprietà da una raccolta di oggetti.

Per la rimozione di una proprietà da un singolo oggetto questo metodo potrebbe essere più 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') 
+0

Molto bello, ho imparato qualcosa di nuovo. –

+0

Ah! Stavo lavorando con il metodo 'Remove' e non riuscivo a farlo funzionare, ma ha senso che dovresti applicarlo in modo specifico alla classe con le proprietà al suo interno. Grazie a tutti e due. – Tohuw

+2

Mi sono scocciato con Rimuovi la scorsa notte e da quello che posso dire non sempre funziona. Prova 'Get-Process -id $ pid | % {$ _. psobject.properties.remove ('__ NounName'); $ _} | % __NounName'. Non è sorprendente che funzioni anche con psobject o pscustomobject. OTOH sono riuscito a ottenerlo con DisplayHint su Get-Date. –

11

Non penso che sia possibile rimuovere da un oggetto esistente ma è possibile crearne uno filtrato.

$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 

Questo raggiungerà in modo efficace lo stesso risultato.

+8

La parte '' -Property * è realmente necessario o non funziona. Grazie per il suggerimento Andy! – DarkLite1

0

Se può dipendere dal tipo di oggetto o la raccolta che si desidera rimuovere dal. Di solito è una collezione (array) di oggetti come si potrebbe ottenere da 'import-csv' che si può fare abbastanza facilmente.

$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 

Il per rimuovere una proprietà da ciascuno di questi:

$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 
Problemi correlati