2013-07-28 29 views

Trả lời

30

Select-Object với ExcludeProperty là cách tốt để xóa thuộc tính khỏi bộ sưu tập đối tượng.

Đối với loại bỏ một tài sản từ một đối tượng duy nhất phương pháp này có thể hiệu quả hơn:

# 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

Rất hay, học được điều gì đó mới mẻ. –

+0

Ah! Tôi đã sử dụng phương pháp 'Remove' và không thể làm việc, nhưng có nghĩa là bạn phải áp dụng nó một cách cụ thể cho lớp với các thuộc tính trong đó. Cám ơn hai bạn. – Tohuw

+2

Tôi đã lộn xộn xung quanh với Remove đêm qua và từ những gì tôi có thể nói với nó không phải luôn luôn làm việc. Thử 'Get-Process -id $ pid | % {$ _. psobject.properties.remove ('__ NounName'); $ _} | % __NounName'. Nó không phải là đáng ngạc nhiên nó sẽ làm việc với một psobject hoặc pscustomobject thậm chí. OTOH Tôi đã có thể nhận được nó với DisplayHint trên Get-Date. –

11

Tôi không nghĩ rằng bạn có thể xóa khỏi đối tượng hiện có nhưng bạn có thể tạo một đối tượng được lọc.

$obj = New-Object -TypeName PsObject -Property @{ Test = 1} 
$obj | Add-Member -MemberType NoteProperty -Name Foo -Value Bar 
$new_obj = $obj | Select-Object -Property Test 

Hoặc

$obj | Select-Object -Property * -ExcludeProperty Foo 

này một cách hiệu quả sẽ đạt được kết quả tương tự.

+8

Phần '-Property * 'là thực sự cần thiết hoặc nó không hoạt động. Cảm ơn Andy! – DarkLite1

0

Nếu có thể phụ thuộc vào loại đối tượng hay tập hợp bạn muốn loại bỏ từ. Thường nó là một bộ sưu tập (mảng) của các đối tượng như bạn có thể nhận được từ 'import-csv' mà bạn có thể làm điều đó khá dễ dàng.

$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 

Các để loại bỏ một tài sản từ mỗi trong số này:

$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