PowerShell - 如何从数组中获取PsObject属性的值?
问题描述:
编辑:改写问题更清晰PowerShell - 如何从数组中获取PsObject属性的值?
这里是工作代码:
$arr = @(
@('prop0','name0'),
@('prop1','name1'),
@('prop2','name2')
)
$obj = New-Object PsObject
foreach($innerArr in $arr)
{
$obj | Add-Member -NotePropertyName $innerArr[0] -NotePropertyValue $null
}
$obj2 = New-Object PsObject
$count = 0
foreach($innerArr in $arr)
{
$value = 'val' + $count
$obj2 | Add-Member -NotePropertyName $innerArr[1] -NotePropertyValue $value
$count ++
}
for($i=0; $i -lt $arr.Count; $i++)
{
# This is what I want to consolidate into one line
# {
$prop_name = $arr[$i][1]
$obj | Add-Member -NotePropertyName $arr[$i][1] -NotePropertyValue $obj2.$prop_name
# }
}
如何做到这一点不分配的财产,以$prop_name
的名字吗?
的$obj
输出应该是这样的:
PS C:\> $obj
prop0 :
prop1 :
prop2 :
name0 : val0
name1 : val1
name2 : val2
答
这将让你过去的一部分,你的示数上:
$obj | Add-Member -NotePropertyName $arr[$i][1] -NotePropertyValue $obj2.PSObject.Properties.Item("name$i").value
的问题是你的治疗PSobject像一个数组时它不像一个数组。它更像一本字典。
重点:值
重点:值
重点:值
由于没有层次,你必须指定哪些关键你正在寻找。
如果我要做到这一点,我会的东西,如
$obj2arr = @($obj2.PSObject.Properties | %{$_})
for($i=0; $i -lt $arr.Count; $i++)
{
$obj | Add-Member -NotePropertyName $arr[$i][1] -NotePropertyValue $obj2arr[$i].Value
}
开启PSObject到项目的数组和蒲凌我想用
财产去既然你的问题已经改变了因为我在这里回答的是脚本缩短
$arr = @(
@('prop0','name0'),
@('prop1','name1'),
@('prop2','name2')
)
$obj = New-Object PsObject
$arr | %{ $obj | Add-Member -NotePropertyName $_[0] -NotePropertyValue $null}
$obj2 = New-Object PsObject
$count = 0
$arr | %{ $obj2 | Add-Member -NotePropertyName $_[1] -NotePropertyValue ('val' + $count); $count++}
$obj2arr = @($obj2.PSObject.Properties | %{$_})
$count = 0
$arr | foreach-object{$obj | Add-Member -NotePropertyName ($_)[1] -NotePropertyValue $obj2arr[$count].Value; $count++}
$obj
+0
嘿,我给了你一个赞成票。我提出的问题更清楚。我只想将最后一个循环合并到一行,但我不知道如何。我觉得没有必要先存储'$ prop_name' –
您的第一个数组是一个由两个元素组成的数组。如果你解释你正在试图解决什么问题,或许这会有所帮助。 –
@Bill_Stewart什么?你看了这篇文章吗? '$ obj2。$ arr [$ i] [1]'正在杀死它 –
对不起,我不清楚。什么问题决定了数据结构? –