2013-07-28 92 views

回答

30

Select-ObjectExcludeProperty適用於從對象集合中刪除屬性。

對於來自單個物體移除屬性這個方法可能更有效:

# 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

非常好,學到了新東西。 –

+0

啊!我使用'Remove'方法進行工具化,並且無法使其工作,但有意義的是,您必須將它專門應用於具有其中的屬性的類。感謝你們倆。 – Tohuw

+2

昨天晚上,我在搞清除,從我可以告訴它並不總是工作。嘗試'Get-Process -id $ pid | %{$ _。psobject.properties.remove('__ NounName'); $ _} | %__NounName'。毫不奇怪,它甚至可以與psobject或pscustomobject一起工作。 OTOH我可以在Get-Date上使用DisplayHint。 –

11

我不認爲你可以從現有的對象中刪除,但你可以創建一個過濾的。

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

或者

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

這將有效地達到同樣的效果。

+8

的部分'-Property *'真的有必要或不工作。感謝提示Andy! – DarkLite1

0

如果可以依靠你要從中刪除對象或集合的類型。通常它的一個像你一樣的對象的集合(數組)可能來自'import-csv',你可以很容易地做到這一點。

$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 

的,從每一個這些刪除屬性:

$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