54

我需要从对象中删除一个成员(特别是 NoteProperty)。我该如何做到这一点?

4

4 回答 4

74

Select-ObjectwithExcludeProperty适用于从对象集合中删除属性。

对于从单个对象中删除属性,此方法可能更有效:

# 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')
于 2013-07-28T06:52:42.167 回答
26

我不认为您可以从现有对象中删除,但您可以创建一个过滤的对象。

$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

这将有效地达到相同的结果。

于 2013-07-28T04:57:47.813 回答
8

如果您有兴趣从大型对象中删除一两个属性,我发现以下内容会有所帮助。将您的对象转换为 JSON,然后再转换回对象 - 所有属性都转换为 NoteProperty 类型,此时您可以删除您喜欢的内容。

   $mycomplexobject = $mycomplexobject | ConvertTo-Json | ConvertFrom-Json

    $mycomplexobject.PSObject.Properties.Remove('myprop')

转换为 JSON 并返回会创建一个 PSCustomObject。您将表达原始对象,然后可以根据需要删除。

于 2018-04-21T23:26:19.633 回答
2

如果可以取决于要从中删除的对象或集合的类型。通常它是一个对象的集合(数组),就像您可能从“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
于 2017-06-15T19:51:56.280 回答