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

私は昨晩Removeを使いこなしていました。私はそれがいつもうまくいくとは言えません。 'Get-Process -id $ pid | %{$ _。psobject.properties.remove( '__ NounName'); $ _} | %__名前。 psobjectやpscustomobject evenでもうまくいくのは当然のことです。 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 *'本当に必要であるか、それは動作しません。アンディのおかげで、ありがとう! – 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 
関連する問題