迁移至Microsoft Graph PowerShell时Get-MgUserMemberOf获取组成员报错
问题解决建议:Get-MgUserMemberOf 资源不存在错误
错误根源
你调用Get-MgUserMemberOf时传入的是完整的用户对象,而非用户的Id属性值。Get-MgUser返回的是MicrosoftGraphUser类型对象,直接将该对象传给-UserId参数会导致Graph无法识别目标资源,从而抛出错误。
修复步骤
提取用户ID作为参数传递
在循环中,将Get-MgUserMemberOf -UserId $user改为Get-MgUserMemberOf -UserId $user.Id,示例代码片段:# 获取未授权用户(过滤无许可证的用户) $unlicensedUsers = Get-MgUser -Filter "assignedLicenses/`$count eq 0" -ConsistencyLevel eventual -CountVariable unlicensedCount -All # 循环处理每个用户 foreach ($user in $unlicensedUsers) { # 正确传入用户ID获取组成员身份 $userGroups = Get-MgUserMemberOf -UserId $user.Id # 后续根据组判断并分配许可证的逻辑... }额外优化与验证建议
- 批量处理提升效率:先通过
Select-Object Id提取所有用户ID,再批量调用API减少请求次数,避免频繁循环调用带来的性能问题。 - 确认权限生效:确保配置的
User.ReadWrite.All、Organization.Read.All、Directory.Read.All应用权限已获得管理员同意,且脚本使用应用权限认证(而非委派权限),自动化场景推荐用-ClientSecret或-CertificateThumbprint方式连接Graph。 - 校验用户对象:在循环中增加判断,确保
$user.Id不为空,避免传入无效值导致请求失败。
- 批量处理提升效率:先通过
内容的提问来源于stack exchange,提问作者KingsGambit
相关产品推荐
相关产品推荐

