如何获取Azure AD中成员及其Active Assignment角色列表,并验证角色授予方式及集成至脚本
查询Azure AD角色的授予方式(直接/组授予)并集成到脚本
没问题!要搞清楚Azure AD里那些带「Active Assignment」的角色是直接授予用户还是通过组分配的,我们可以扩展你现有的PowerShell脚本,通过检查角色成员的类型来实现。下面我给你调整后的脚本,还有详细的说明:
修改后的完整脚本
Connect-AzureAD $roles = Get-AzureADDirectoryRole | Select-Object ObjectId, DisplayName # 用来存储所有角色分配结果的数组 $roleAssignmentDetails = @() ForEach($role in $roles){ # 获取当前角色的所有成员 $roleMembers = Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId ForEach($member in $roleMembers){ # 判断分配类型:用户就是直接授予,组就是通过组授予 $assignmentType = switch($member.ObjectType){ "User" { "Direct Assignment" } "Group" { "Group Assignment" } default { "Unknown Type" } } # 组装成结构化的结果对象 $assignmentRecord = [PSCustomObject]@{ "Azure Role Name" = $role.DisplayName "Member Display Name" = $member.DisplayName "Member Object ID" = $member.ObjectId "Member Type" = $member.ObjectType "Assignment Method" = $assignmentType } $roleAssignmentDetails += $assignmentRecord } } # 输出格式化结果,也可以导出到CSV方便分析 $roleAssignmentDetails | Format-Table -AutoSize # 取消注释下面一行可以导出到本地CSV文件 # $roleAssignmentDetails | Export-Csv -Path "AzureAD_Role_Assignments.csv" -NoTypeInformation
关键逻辑说明
- 区分分配方式:通过检查成员的
ObjectType属性,如果是User就是直接把角色分配给了用户;如果是Group,说明这个角色是先分配给组,再通过组间接授予组内用户的。 - 结构化结果:用
PSCustomObject把所有相关信息打包,方便后续查看、筛选或者导出到文件。 - 扩展性:如果你需要进一步查询组里的具体用户,还可以在
Group分支里加入Get-AzureADGroupMember命令来获取组内成员列表。
集成到你的现有脚本
你可以把上面的核心逻辑(也就是判断ObjectType和组装结果的部分)替换掉你原来脚本里的select语句。比如原来的:
Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId | select @{n="Azure role";e={$role.DisplayName}}, displayname
改成我们上面的循环处理逻辑,就能直接把分配方式的信息加进去。
注意事项
- 确保你有Azure AD管理员权限(比如全局管理员、角色管理员),否则可能无法读取完整的角色分配信息。
- 如果你正在迁移到Microsoft Graph PowerShell模块(微软推荐的新模块),也可以用类似逻辑:用
Get-MgDirectoryRoleMember获取成员,然后同样通过ObjectType判断分配方式。
内容的提问来源于stack exchange,提问作者ak2595
相关产品推荐
相关产品推荐

