2013-07-28 52 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