2014-11-28 12 views
6

Tôi đã điều sau đây:động được sở hữu PSCustomObject và đánh giá cao

$test = [pscustomobject]@{ 
    First="Donald"; 
    Middle="Fauntleroy"; 
    Last="Duck"; 
    Age=80 
} 
$test | Get-Member -MemberType NoteProperty | % {"$($_.Name)="} 

mà in:

Age= 
First= 
Last= 
Middle= 

Tôi muốn trích xuất các giá trị từ mỗi tài sản và có nó bao gồm như là giá trị cho các cặp giá trị tên của tôi sao cho nó trông giống như:

Age=80 
First=Donald 
Last=Duck 
Middle=Fauntleroy 

Tôi đang cố tạo chuỗi và không biết tên thuộc tính trước thời hạn. Làm cách nào để kéo các giá trị để hoàn tất các cặp giá trị tên của tôi?

Trả lời

7

Cách duy nhất tôi có thể tìm (cho đến nay) là để làm một cái gì đó như:

$test = [pscustomobject]@{ 
    First="Donald"; 
    Middle="Fauntleroy"; 
    Last="Duck"; 
    Age=80 
} 

$props=Get-Member -InputObject $test -MemberType NoteProperty 

foreach($prop in $props) { 
    $propValue=$test | Select-Object -ExpandProperty $prop.Name 
    $prop.Name + "=" + $propValue 
} 

Điều quan trọng là sử dụng -ExpandProperty

Nếu ai có một cách gọn gàng hơn để làm điều này xin vui lòng gửi!

+2

cải thiện nhẹ để tra cứu giá trị: '$ prop.Name +" = "+ $ test. ($ prop.Name)' – scobi

+0

@scobi Trớ trêu thay rằng tôi cần chuỗi 2 năm cũ này anh ấy cùng ngày bạn đăng bài này! Cách của bạn rất ngắn gọn và là câu trả lời hay cho câu hỏi. Tôi sẽ chuyển nó thành một câu trả lời! –

+0

ok, chắc chắn, tại sao không :) – scobi

4

ngắn hơn, nhiều tùy chọn poshy:

$test | Get-Member -MemberType NoteProperty | % Name | %{ 
    $_ + '=' + $test.$_ 
} 
1

Không chắc chắn nếu nó thực sự tốt hơn, nhưng đây là thêm một biến thể:

$test.psobject.Members | ? {$_.Membertype -eq "noteproperty"} | 
    %{ $_.Name + '='+ $_.Value } 
+0

Điều này cũng chọn các phương thức 'Object' như' ToString() 'và' GetHashCode() ', có thể không phải là những gì bạn muốn. Ví dụ, nếu tôi liệt kê các thuộc tính của một đối tượng được tạo với 'ConvertFrom-Json', I * do * chỉ muốn các noteproperties mà tôi nhận được từ' Get-Member -Type NoteProperty' – Arnavion

0

biến thể của tôi:

$memberNames=($test |Get-Member -Type NoteProperty).Name 
foreach ($mname in $memberNames) { 
    "{0}={1}" -f $mname,$Test."$mname" 
} 
Các vấn đề liên quan