如何从数组访问子对象?

时间:2019-07-30 23:47:19

标签: powershell

我有以下

$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输出:

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

对此进行测试:$array.members

member1,member2

member3
member4

我正在尝试访问每个角色的成员

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

据我了解,我应该回来

members

相反,我什么也没打印回来!

怎么来?

此外,如果我想按名称访问对象,则可以使用哈希表,但由于某种原因,它不能正常工作。

$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输出

output

而不是输出:

hash

输出与$array有何不同?

1 个答案:

答案 0 :(得分:1)

foreach上使用$array,然后可以访问循环内的各个属性:

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

这将导致

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