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

如何合并PowerShell脚本导出Azure AD组的成员与所有者至CSV

合并Azure AD组成员与所有者导出脚本的解决方案

当然可以将两个脚本合并,以下是整合后的PowerShell脚本,它会一次性导出所有Azure AD组的成员信息与对应组的所有者信息,同时处理了无成员、无所有者等边界场景:

Connect-AzureAD
$results = @()

# 获取所有Azure AD组
$groups = Get-AzureADGroup -All $true

foreach ($group in $groups) {
    # 获取当前组的成员列表
    $members = Get-AzureADGroupMember -ObjectId $group.ObjectId -All $true
    # 获取当前组的所有者列表
    $owners = Get-AzureADGroupOwner -ObjectId $group.ObjectId -All $true

    # 处理无成员的组
    if (-not $members) {
        if ($owners) {
            # 无成员但有所有者,生成对应条目
            foreach ($owner in $owners) {
                $output = [PSCustomObject]@{
                    "组名称"                  = $group.DisplayName
                    "成员名称"                = $null
                    "成员对象类型"            = $null
                    "成员用户类型"            = $null
                    "成员用户主体名称"        = $null
                    "所有者对象ID"           = $owner.ObjectId
                    "所有者对象类型"         = $owner.ObjectType
                    "所有者用户类型"         = $owner.UserType
                    "所有者用户主体名称"     = $owner.UserPrincipalName
                }
                $results += $output
            }
        } else {
            # 无成员也无所有者,生成空条目
            $output = [PSCustomObject]@{
                "组名称"                  = $group.DisplayName
                "成员名称"                = $null
                "成员对象类型"            = $null
                "成员用户类型"            = $null
                "成员用户主体名称"        = $null
                "所有者对象ID"           = $null
                "所有者对象类型"         = $null
                "所有者用户类型"         = $null
                "所有者用户主体名称"     = $null
            }
            $results += $output
        }
        continue
    }

    # 遍历每个成员,关联对应组的所有者
    foreach ($member in $members) {
        if ($owners) {
            # 组有多个所有者时,每个成员与每个所有者分别生成一行
            foreach ($owner in $owners) {
                $output = [PSCustomObject]@{
                    "组名称"                  = $group.DisplayName
                    "成员名称"                = $member.DisplayName
                    "成员对象类型"            = $member.ObjectType
                    "成员用户类型"            = $member.UserType
                    "成员用户主体名称"        = $member.UserPrincipalName
                    "所有者对象ID"           = $owner.ObjectId
                    "所有者对象类型"         = $owner.ObjectType
                    "所有者用户类型"         = $owner.UserType
                    "所有者用户主体名称"     = $owner.UserPrincipalName
                }
                $results += $output
            }
        } else {
            # 组无所有者时,生成成员+空所有者字段的条目
            $output = [PSCustomObject]@{
                "组名称"                  = $group.DisplayName
                "成员名称"                = $member.DisplayName
                "成员对象类型"            = $member.ObjectType
                "成员用户类型"            = $member.UserType
                "成员用户主体名称"        = $member.UserPrincipalName
                "所有者对象ID"           = $null
                "所有者对象类型"         = $null
                "所有者用户类型"         = $null
                "所有者用户主体名称"     = $null
            }
            $results += $output
        }
    }
}

# 导出整合后的结果到CSV文件
$results | Export-Csv -Encoding UTF8 -Path "D:\Script\AzureADGroups_Members_Owners.csv" -NoTypeInformation

脚本优化说明

  • 使用[PSCustomObject]创建输出对象,比原脚本的New-Object更简洁高效
  • 统一处理了各种边界场景:无成员的组、无所有者的组、多成员多所有者的组
  • 字段名称使用中文,更易理解(如需英文可自行替换字段名)
  • 避免了原所有者脚本中全局哈希表可能导致的数据覆盖问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:05:17