You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过PowerShell脚本导出Azure AD含嵌套组的用户列表及所属组

解决Azure AD嵌套组成员导出问题

原脚本报错原因

你遇到的Get-AzureADGroupMember : Cannot bind argument to parameter 'ObjectId' because it is null错误,以及无法整合用户和组信息的问题,根源在于:

  • 递归逻辑错误:直接对成员集合$members判断ObjectType,而非遍历单个成员;递归调用时命令名拼写错误(Get-AzureADGroupMembers多了末尾的s),且未定义$member变量
  • 代码结构混乱:用户判断逻辑在ForEach ($group in $groups)循环外部,无法正确关联每个组的成员
  • 未实现真正的递归遍历:无法处理多层嵌套的子组

修正后的PowerShell脚本

以下脚本会递归遍历目标组及其所有嵌套子组,收集用户的用户名、邮箱(UserPrincipalName)、所属组名称信息,并导出为CSV文件:

# 连接Azure AD
Connect-AzureAD

# 定义递归函数遍历组及其嵌套子组
function Get-NestedGroupMembers {
    param(
        [Parameter(Mandatory=$true)]
        [string]$GroupObjectId,
        [Parameter(Mandatory=$true)]
        [string]$GroupName
    )

    $members = Get-AzureADGroupMember -ObjectId $GroupObjectId -All $true
    foreach ($member in $members) {
        if ($member.ObjectType -eq 'User') {
            # 创建用户对象,关联所属组信息
            [PSCustomObject]@{
                "所属组名称" = $GroupName
                "用户名"     = $member.DisplayName
                "邮箱"       = $member.UserPrincipalName
                "用户类型"   = $member.UserType
            }
        }
        elseif ($member.ObjectType -eq 'Group') {
            # 递归遍历子组
            Get-NestedGroupMembers -GroupObjectId $member.ObjectId -GroupName $member.DisplayName
            # 如果需要同时记录用户属于顶层父组,可取消下面注释
            # Get-NestedGroupMembers -GroupObjectId $member.ObjectId -GroupName $GroupName
        }
    }
}

# 目标组名称
$targetGroupName = "my-group-name"
# 获取目标组对象
$targetGroups = Get-AzureADGroup -SearchString $targetGroupName

# 初始化结果集合
$results = @()

# 遍历每个目标组,收集成员
foreach ($group in $targetGroups) {
    $results += Get-NestedGroupMembers -GroupObjectId $group.ObjectId -GroupName $group.DisplayName
}

# 导出到CSV文件(注意修改路径为你的实际路径)
$results | Export-Csv -Path "C:\Users\Desktop\aadgroupmembers.csv" -Encoding UTF8 -Delimiter ";" -NoTypeInformation

脚本说明

  • 使用递归函数Get-NestedGroupMembers处理多层嵌套组,自动遍历子组
  • 明确区分用户和组类型,仅收集用户信息并关联所属组
  • 导出的CSV包含你需要的核心字段:所属组名称、用户名、邮箱、用户类型
  • 若需要记录用户属于顶层父组而非直接子组,可取消函数中对应注释行

内容的提问来源于stack exchange,提问作者MoOn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:40:21