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
关键说明
- 递归遍历嵌套组:通过
Get-NestedMembers函数自动处理多层嵌套的组,不会遗漏任何层级的成员。 - 字段填充逻辑:
- 普通用户直接提取
DisplayName和UserPrincipalName,确保字段非空 - 嵌套组用自身的
DisplayName填充UserName字段,同时在UserPrincipalName标注说明,避免空白值
- 普通用户直接提取
- Runbook适配:用
Connect-AzureAD -Identity以托管身份验证,无需手动输入凭据,符合自动化场景要求 - 精准组筛选:用正则表达式
^MT(_.*)?$精准匹配目标组,避免误选其他相似名称的组
权限要求
确保Runbook的托管身份拥有Azure AD的目录读取者或组成员读取者权限,否则会出现权限不足的报错。
内容的提问来源于stack exchange,提问作者Carlos Samayoa
相关产品推荐
相关产品推荐

