2017-10-19 31 views
-1

Modifier: question Reformulation d'être plus clairPowerShell - Comment obtenir la valeur de la propriété PsObject à partir d'un tableau?

Voici le code de travail:

$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 
    # } 
} 

Comment puis-je faire sans lui attribuer le nom de la propriété à $prop_name?

La sortie de $obj devrait ressembler à ceci:

PS C:\> $obj 
prop0 : 
prop1 : 
prop2 : 
name0 : val0 
name1 : val1 
name2 : val2 
+0

Votre premier tableau est un tableau de tableaux à deux éléments. Il serait peut-être utile que vous expliquiez le problème que vous essayez de résoudre. –

+0

@Bill_Stewart Quoi? as-tu lu le post? '$ obj2. $ arr [$ i] [1]' est en train de le tuer –

+0

Désolé, je n'étais pas clair. Quel problème dicte cette structure de données? –

Répondre

1

Cela vous franchir la pièce que vous erroring sur:

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

La question est votre traitement de la psobject comme un tableau lorsque il n'agit pas comme un tableau. C'est plus le long des lignes d'un dictionnaire.

Clé: Valeur

Clé: Valeur

Clé: Valeur

Comme il n'y a pas de hiérarchie, vous devez spécifier quelle clé que vous recherchez.

Si je devais le faire, je voudrais aller avec quelque chose comme

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

Mise PSObject dans un tableau d'articles et puling la propriété que je veux utiliser

Étant donné que votre question a changé peu depuis que j'ai répondu ici est le raccourci du script

$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

Hé, je vous ai donné un upvote. J'ai fait la question plus claire. Je veux juste consolider la dernière boucle pour une ligne et je ne sais pas comment. Je pense qu'il n'est pas nécessaire de stocker d'abord '$ prop_name' en premier –