0

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?

1 Answer 1

1

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
Sign up to request clarification or add additional context in comments.

5 Comments

what if i want to print role in the outside loop then members, something like: foreach($role in $array.Role) { $role; foreach($member in $role.Members){$member} }
Sure, you can do whatever you want inside the loop body :)
so can i wrap it like this: foreach($item in $array){foreach($role in $item.Role) { $role; foreach($member in $role.Members){$member} }}
Sure, but it won't work - $item.Role is just a single string ("role1" for example)
ohhh this is probably because of the limitation that array object cant be accessed by name huh...hmm, i think ill go with your hashtable answer as it seems to suit my needs since i want to access the members by role name, but its not printing the correct output. i posted this as well in my post, but if you want i can open a new thread to address the issue?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.