web-dev-qa-db-ja.com

PowerShellオブジェクトからメンバーを削除しますか?

オブジェクトからメンバー(具体的には、NoteProperty)を削除する必要があります。どうすればこれを達成できますか?

36
Tohuw

Select-Object with 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')
48
Roman Kuzmin

既存のオブジェクトから削除できるとは思いませんが、フィルターされたオブジェクトを作成することはできます。

$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

これは効果的に同じ結果を達成します。

16
Andy Arismendi

ラージオブジェクトから1つまたは2つのプロパティのみを削除することに興味がある場合、次のことが役立ちます。オブジェクトをJSONに変換してからオブジェクトに戻します。すべてのプロパティはNoteProperty型に変換されます。この時点で、好きなものを削除できます。

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

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

JSONへの変換およびその逆により、PSCustomObjectが作成されます。元のオブジェクトを表現し、必要に応じて削除できます。

2
jfosc

削除するオブジェクトまたはコレクションのタイプに依存する場合。一般的には、 '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
0
Ernie M.