动态将数组值转换为对象属性

时间:2020-11-03 20:53:02

标签: powershell

我有用户列表,我正在尝试查看他们是否属于特定的Azure AD组。最后,我希望结果是这样的。

EmailAddress     Group1  Group2
User1@email.com   Y         N
User2@email.com   N         Y
User3@email.com   Y         Y

这是我到目前为止所得到的:

#authenticate
Connect-MsolService

$users = "User1@email.com", "User2@email.com", "User3@email.com"
$groupLists = "Group1", "Group2"

#create the object with Email, and group name as property name
$output = New-Object -TypeName psobject
$output | Add-Member -MemberType NoteProperty -Name Email -Value ""

$groupLists | ForEach-Object{
    $output | Add-Member -MemberType NoteProperty -Name $_ -Value ""

}

#go through each group and user and update the output array
$userExistsInGroup;

foreach ($groupName in $groupLists) {
    #get group info
    $group = Get-Msolgroup -All | Where-Object {$_.DisplayName -eq $groupName}
    
    #get all members of the group
    $members = Get-MsolGroupMember -GroupObjectId $group.ObjectId | Select-Object -ExpandProperty EmailAddress    
    
    foreach ($user in $users) {
        If ($members -contains $user) {        
            $userExistsInGroup; = "Y"
        } Else {         
            $userExistsInGroup = "N"
        }

        # update Email and group property in $output object
         ......
    }
}

需要帮助更新$ output对象,以便我可以在顶部显示结果的方式吗? 因为同一用户可能在循环期间出现在不同的组中,所以如果对象中存在现有用户,则它将需要更新与该组匹配的同一用户的属性,以便最后每行输出属于一个用户类似于我在顶部。

1 个答案:

答案 0 :(得分:1)

要容纳动态分组列表,可以使用这种方法。

$userlist = "User1@email.com", "User2@email.com", "User3@email.com"

$grouplist = "Managers","Directors","Information Technology"

$grouphash = @{}

foreach($group in $grouplist)
{
    $grouphash[$group] = Get-MsolGroupMember -GroupObjectId (Get-Msolgroup | Where-Object {$_.DisplayName -eq $group}).objectid
}

foreach($user in $userlist)
{
    $userhash = [ordered]@{
        EmailAddress = $user
    }
    $grouplist | ForEach-Object {
        $userhash.add($_,($user -in $grouphash[$_].emailaddress))
    }
    [PSCustomObject]$userhash
}

如果用户是成员,则每个组名将是包含true / false的该组的属性。

要将所有输出收集到变量中,只需将$variable = 放在用户foreach循环的前面即可。

这是此示例中的输出结果 enter image description here