2017-10-19 97 views
-1

編輯:改寫問題更清晰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

對不起,我不清楚。什麼問題決定了數據結構? –

回答

1

這將讓你過去的一部分,你的示數上:

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