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

PowerShell脚本获取EntraID用户组成员所属组无输出求助

解决Entra ID脚本中Groups列无内容的问题

问题原因分析

原脚本的核心问题有两个:

  1. Get-MgUserMemberOf 返回的对象默认是 DirectoryObject 类型,直接用 -is [Microsoft.Graph.PowerShell.Models.MicrosoftGraphGroup] 判断类型会失效,因为实际返回的对象并没有直接映射到这个具体类型。
  2. Get-MgGroupMember 可能返回组、用户等多种类型的成员,没有过滤的话会导致非用户对象进入循环,引发不必要的错误或空值。

修正后的脚本

Connect-MgGraph -Scopes "Group.Read.All", "User.Read.All"

$groupId = "你的目标组ID"

# 只过滤出用户类型的组成员
$groupMembers = Get-MgGroupMember -GroupId $groupId -All | Where-Object {$_.AdditionalProperties.'@odata.type' -eq '#microsoft.graph.user'}

$userGroups = @()

foreach ($member in $groupMembers) {
    $userId = $member.Id
    $user = Get-MgUser -UserId $userId -Property DisplayName, UserPrincipalName
    
    # 获取用户所属的所有组,过滤并提取组名称
    $userGroupMemberships = Get-MgUserMemberOf -UserId $userId -All | 
        Where-Object {$_.AdditionalProperties.'@odata.type' -eq '#microsoft.graph.group'} |
        ForEach-Object { $_.AdditionalProperties.displayName }

    $userGroups += [PSCustomObject]@{
        UserPrincipalName = $user.UserPrincipalName
        DisplayName       = $user.DisplayName
        Groups            = $userGroupMemberships -join ', ' # 将多个组用逗号分隔显示
    }
}

$userGroups | Format-Table -AutoSize

关键修改说明

  • 过滤组成员类型:通过@odata.type判断只保留用户成员,避免处理组或其他对象。
  • 准确识别组对象:同样用@odata.type判断Get-MgUserMemberOf返回的结果是否为组,确保只提取组的名称。
  • 优化属性获取:Get-MgUser指定需要的属性,减少不必要的数据请求;将多个组名称用逗号拼接,在表格中更易读。
  • 容错处理:如果用户没有所属组,Groups列会显示为空,不会报错。

内容的提问来源于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 09:26:04