我有以下内容:
$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
我正在尝试构建一个字符串,并且不提前知道属性名称。如何提取值以完成我的名称值对?
答案 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