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

Azure AD特定组成员报告如何处理嵌套组?求PowerShell解决方案

处理Azure AD嵌套组成员的PowerShell报告脚本

针对你遇到的嵌套组成员字段空白问题,以下是适配Azure Runbook(PowerShell 7.2)的完整解决方案,核心是通过递归遍历嵌套组,并区分成员类型填充对应字段:

完整代码

# 以托管身份连接Azure AD(Runbook专用)
Connect-AzureAD -Identity

# 匹配DisplayName为'MT'或'MT_*'的组
$targetGroups = Get-AzureADGroup -All $true | Where-Object {
    $_.DisplayName -match "^MT(_.*)?$"
}

# 递归获取所有层级的组成员
function Get-NestedMembers {
    param(
        [Parameter(Mandatory)]
        [Microsoft.Open.AzureAD.Model.Group]$ParentGroup
    )

    $members = Get-AzureADGroupMember -ObjectId $ParentGroup.ObjectId -All $true

    foreach ($member in $members) {
        switch ($member.ObjectType) {
            "User" {
                [PSCustomObject]@{
                    ParentGroup = $ParentGroup.DisplayName
                    ParentGroupId = $ParentGroup.ObjectId
                    MemberType = "用户"
                    UserName = $member.DisplayName
                    UserPrincipalName = $member.UserPrincipalName
                    MemberId = $member.ObjectId
                }
            }
            "Group" {
                # 先记录嵌套组本身的信息,用组名填充UserName避免空白
                [PSCustomObject]@{
                    ParentGroup = $ParentGroup.DisplayName
                    ParentGroupId = $ParentGroup.ObjectId
                    MemberType = "嵌套组"
                    UserName = $member.DisplayName
                    UserPrincipalName = "N/A(组无UPN)"
                    MemberId = $member.ObjectId
                }
                # 递归遍历该嵌套组的成员
                Get-NestedMembers -ParentGroup $member
            }
        }
    }
}

# 收集所有成员数据
$reportData = @()
foreach ($group in $targetGroups) {
    $reportData += Get-NestedMembers -ParentGroup $group
}

# 导出为CSV报告(Runbook中可存储到存储账户或直接输出)
$reportData | Export-Csv -Path "./MTGroupMembers.csv" -NoTypeInformation -Encoding UTF8

关键说明

  1. 递归遍历嵌套组:通过Get-NestedMembers函数自动处理多层嵌套的组,不会遗漏任何层级的成员。
  2. 字段填充逻辑:
    • 普通用户直接提取DisplayName和UserPrincipalName,确保字段非空
    • 嵌套组用自身的DisplayName填充UserName字段,同时在UserPrincipalName标注说明,避免空白值
  3. Runbook适配:用Connect-AzureAD -Identity以托管身份验证,无需手动输入凭据,符合自动化场景要求
  4. 精准组筛选:用正则表达式^MT(_.*)?$精准匹配目标组,避免误选其他相似名称的组

权限要求

确保Runbook的托管身份拥有Azure AD的目录读取者或组成员读取者权限,否则会出现权限不足的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:22:13