动态获取PSCustomObject属性和值

时间:2014-11-28 20:04:36

标签: powershell-v3.0

我有以下内容:

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

打印:

Age=
First=
Last=
Middle=

我想从每个属性中提取值并将其作为我的名称值对的值包含在内,所以它看起来像:

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

我正在尝试构建一个字符串,并且不提前知道属性名称。如何提取值以完成我的名称值对?

6 个答案:

答案 0 :(得分:10)

我能找到的唯一方法(到目前为止)就是这样做:

$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
}

关键是使用-ExpandProperty

答案 1 :(得分:7)

更短,更多PowerShell' ish选项:

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

答案 2 :(得分:1)

不确定它是否真的更好,但这里还有一个变体:

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

答案 3 :(得分:1)

我的变体:

$memberNames = ($test | Get-Member -Type NoteProperty).Name
foreach ($mname in $memberNames) {
    "{0}={1}" -f $mname,$Test."$mname"
}

答案 4 :(得分:0)

我使用:

$MyObjectProperties = Get-Member -InputObject $MyObject -MemberType NoteProperty

$MyObjectProperties | % {
    $PropertyName = $_.Name
    $PropertyValue = $MyObject."$PropertyName"
    # ...
}

答案 5 :(得分:0)

解决这个老问题的捷径。 您可以使用:

$test.PSObject.Properties | %{Write-Output "$($_.Name)=$($_.Value)"}

如果你想在运行时以编程方式访问某个字段,通过使用变量作为字段选择器,那么你可以使用:

$myProperty = "Age"
$test.PSObject.Properties[$myProperty].Value