2017-10-19 84 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

最初の配列は2要素配列の配列です。おそらく、あなたが解決しようとしている問題を正確に説明すると役に立ちます。 –

+0

@Bill_Stewart何ですか?あなたはその投稿を読んだのですか? '$ obj2。$ arr [$ i] [1]'はそれを殺しています –

+0

申し訳ありませんが、わかりませんでした。データ構造にはどんな問題がありますか? –

答えて

1

これは、あなたがerroringている部分を過ぎてあなたを取得します:

$obj | Add-Member -NotePropertyName $arr[$i][1] -NotePropertyValue $obj2.PSObject.Properties.Item("name$i").value 

問題があなたの時に配列のようPSobjectを扱っていますそれは配列のように動作しません。その辞書の行に沿ってより多くの。

キー:値

はキー:値

キー:値

は、あなたが探しているどのキーを指定する必要は全く階層はありませんので。

私はそれをやろうとしていた場合、あなたの質問が変更されたので、私はアイテムの配列にPSObjectを回すと、私は

を使用するプロパティをpuling

$obj2arr = @($obj2.PSObject.Properties | %{$_}) 
for($i=0; $i -lt $arr.Count; $i++) 
{ 
    $obj | Add-Member -NotePropertyName $arr[$i][1] -NotePropertyValue $obj2arr[$i].Value 
} 

のようなものとなるだろう私がここで答えたのは、スクリプトが短縮されたからです。

$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

ねえ、私はあなたにupvoteを与えました。私は質問をより明確にした。私はちょうど最後のforループを1行に統合したいと思います。最初に '$ prop_name'を最初に保存する必要はないと感じています –

関連する問題