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

PowerShell脚本故障:无法获取Entra ID动态组成员信息

问题分析与修复方案

核心问题原因

  1. 权限缺失:当前连接Graph的权限Group.Read.All仅允许读取组元数据,读取组成员需要额外的GroupMember.Read.All权限,这是导致$users为空的主要原因。
  2. 成员类型判断逻辑错误:Microsoft Graph PowerShell返回的用户对象,其ODataType属性值实际为microsoft.graph.user(不带前缀#),原脚本的判断条件无法匹配到用户成员。
  3. 动态组成员获取限制:部分动态组的成员可能需要通过Get-MgGroupTransitiveMember获取(包含嵌套成员),而Get-MgGroupMember仅返回直接成员。

修复后的脚本

# 连接Graph时添加成员读取权限
Connect-MgGraph -Scopes "Group.Read.All", "User.Read.All", "GroupMember.Read.All"

$groups = Get-MgGroup -All
$filteredGroups = $groups | Where-Object { $_.DisplayName -like "*xy*" }
$output = @()

$filteredGroups | ForEach-Object {
    $group = $_
    $membershipRule = "no dynamic group"
    $users = @()

    # 处理动态组规则
    if ($group.GroupTypes -contains "DynamicMembership") {
        $membershipRule = $group.MembershipRule
    }

    try {
        # 优先获取所有成员(包括嵌套),如果只需要直接成员可换回Get-MgGroupMember
        $members = Get-MgGroupTransitiveMember -GroupId $group.Id -All -ErrorAction Stop
        
        # 修正用户类型判断逻辑
        $userMembers = $members | Where-Object { $_.ODataType -eq "microsoft.graph.user" }
        $users = $userMembers | ForEach-Object { $_.UserPrincipalName }
    }
    catch {
        $users = @("获取成员失败: $($_.Exception.Message)")
    }

    $output += [PSCustomObject]@{
        DisplayName    = $group.DisplayName
        MembershipRule = $membershipRule
        Users          = $users -join "; "
    }
}

$outputCsv = "filtered_groups.csv"
$output | Export-Csv -Path $outputCsv -NoTypeInformation -Encoding UTF8

额外优化说明

  • 添加了try/catch块处理获取成员时的异常(比如权限不足、组不存在等)。
  • 导出CSV时指定-Encoding UTF8,避免中文乱码问题。
  • 若仅需直接成员,可将Get-MgGroupTransitiveMember换回Get-MgGroupMember。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:42:46