Reputation: 3481
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
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
instead of outputting:
how come the output is different from $array
?
Upvotes: 0
Views: 39
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