Tôi cần phải loại bỏ một thành viên (cụ thể là một chú thích) từ một đối tượng. Làm cách nào để tôi thực hiện việc này?Xóa một Thành viên khỏi đối tượng PowerShell?
Trả lời
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')
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ự.
Phần '-Property * 'là thực sự cần thiết hoặc nó không hoạt động. Cảm ơn Andy! – DarkLite1
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
Rất hay, học được điều gì đó mới mẻ. –
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
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. –