迁移AzureAD到Az模块时找不到Get-AzureADUserMembership替代命令
Az模块获取指定用户所属组列表的实现方案
AzureAD 模块的 Get-AzureADUserMembership 没有同名的 Az 模块直接映射 cmdlet,可根据你使用的 Az 模块版本选择以下等效实现方式,返回结果与原 cmdlet 行为完全对齐:
方案1:使用原生Az cmdlet(推荐,Az.Resources 模块 ≥ 5.0.0 版本适用)
高版本 Az 模块的 Get-AzADUser 内置 -MemberOf 参数,可直接拉取指定用户的所属组、目录角色列表,无需额外调用接口:
# 已登录Az环境可跳过此步 Connect-AzAccount # 将参数值替换为目标用户的UPN或对象ID $targetUserId = "zhangsan@contoso.com" $allMemberships = Get-AzADUser -ObjectId $targetUserId -MemberOf
如果仅需要筛选安全组,可直接在结果上过滤:
$securityGroups = $allMemberships | Where-Object SecurityEnabled -eq $true
方案2:调用内置Graph接口(兼容所有Az版本,适配自定义场景)
如果使用的 Az 版本较低、Get-AzADUser 不支持 -MemberOf 参数,可通过 Az 自带的 REST 调用能力直接请求 Microsoft Graph 接口获取数据,逻辑和原 AzureAD 模块的底层实现一致:
Connect-AzAccount $targetUserId = "zhangsan@contoso.com" # 拉取用户直接所属的组/角色,返回字段可按需调整$select后的内容 $allMemberships = Invoke-AzRestMethod -Method Get ` -Path "/v1.0/users/$targetUserId/memberOf?`$select=id,displayName,securityEnabled,mailEnabled,groupTypes" ` | Select-Object -ExpandProperty Content ` | ConvertFrom-Json ` | Select-Object -ExpandProperty value
注意:如果需要获取包含嵌套组的可传递成员资格(即用户通过组嵌套间接加入的所有组),将上述路径中的
memberOf替换为transitiveMemberOf即可,和原Get-AzureADUserMembership加-All $true参数的返回结果一致。
避坑提示
不要通过遍历所有组、调用Get-AzADGroupMember反向匹配用户的方式实现需求,该方式在租户内组、用户数量较大时性能极差,会产生大量不必要的接口调用。
内容的提问来源于stack exchange,提问作者Stickybit
相关产品推荐
相关产品推荐

