我需要从对象中删除一个成员(特别是一个NoteProperty)。我该如何做到这一点?
答案 0 :(得分:44)
Select-Object
的 ExcludeProperty
适用于从对象集合中删除属性。
要从单个对象中删除属性,此方法可能更有效:
# 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')
答案 1 :(得分:15)
我认为您不能从现有对象中删除,但可以创建已过滤的对象。
$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
这将有效地实现相同的结果。
答案 2 :(得分:2)
如果您对从大对象中删除一个或两个属性感兴趣,我发现以下内容有帮助。将您的对象转换为JSON然后转换回对象 - 所有属性都转换为NoteProperty类型,此时您可以删除您喜欢的内容。
$mycomplexobject = $mycomplexobject | ConvertTo-Json | ConvertFrom-Json
$mycomplexobject.PSObject.Properties.Remove('myprop')
转换为JSON并返回创建PSCustomObject。您将表达原始对象,然后您可以根据需要删除。
答案 3 :(得分: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