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 
+0

您的第一个数组是一个由两个元素组成的数组。如果你解释你正在试图解决什么问题,或许这会有所帮助。 –

+0

@Bill_Stewart什么?你看了这篇文章吗? '$ obj2。$ arr [$ i] [1]'正在杀死它 –

+0

对不起,我不清楚。什么问题决定了数据结构? –

这将让你过去的一部分,你的示数上:

$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' –