Cataster
Cataster

Reputation: 3481

How to access sub objects from an array?

I have the following

$roles = 'role1;role2;role3;role4' -split ';'
$members = 'member1,member2;;member3;member4' -split ';'

$i = 0
$array = @(foreach ($role in $roles) {
   [pscustomobject] @{
     Role = $role
     Members = $members[$i++] #-split ','
   }
})

$array outputs:

Role  Members
----  -------
role1 member1,member2
role2
role3 member3
role4 member4

testing this: $array.members

member1,member2

member3
member4

i am trying to access members for each role

$i=-1;
foreach($role in $array.Role)
{   
    $i++; 
    foreach($member in $role[$i].Members){$member}
}

to my understanding, i should get back

members

instead, i get nothing printed back!

how come?

also, if i want to access objects by name, i have an alternative using hashtable, but for some reason, its not working properly.

$roleMembers = @{}

for ($i = 0; $i -lt $roles.Count; $i++) {
  # `Where Length -ne 0` to filter out empty strings
  $roleMembers[$roles[$i]] = $members[($i*2)..($i*2+1)] | Where Length -ne 0
}

$roleMembers outputs

output

instead of outputting:

hash

how come the output is different from $array?

Upvotes: 0

Views: 39

Answers (1)

Mathias R. Jessen
Mathias R. Jessen

Reputation: 174465

Use foreach over $array, and you can access the individual properties inside the loop:

foreach($item in $array){
  foreach($member in $item.Members){
    "$($item.Role): $member"
  }
}

which will result in

role1: member1,member2
role2: 
role3: member3
role4: member4

Upvotes: 1

Related Questions