我有用户列表,我正在尝试查看他们是否属于特定的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对象,以便我可以在顶部显示结果的方式吗? 因为同一用户可能在循环期间出现在不同的组中,所以如果对象中存在现有用户,则它将需要更新与该组匹配的同一用户的属性,以便最后每行输出属于一个用户类似于我在顶部。
答案 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循环的前面即可。