Azure AD查询同时属两个组的用户时遇JSON解析错误求助
Azure AD PowerShell JSON解析错误解决方法
错误原因
- 模块混用冲突:同时使用
Az模块(Get-AzADGroupMember)和AzureAD模块(Get-AzureADUserMembership),两个模块的认证上下文不兼容,导致API返回HTML错误页面而非预期的JSON数据,触发JSON解析失败。 - 参数传递错误:
Get-AzADGroupMember -GroupObjectId未传入具体的组ObjectId参数,无法正确获取组成员。Select-Object ID返回的是包含ID属性的对象,直接将该对象传给Get-AzureADUserMembership的-ObjectId参数,会传入非字符串格式的ID,引发请求异常。
- 未过滤成员类型:
Get-AzADGroupMember会返回用户、组、服务主体等多种类型成员,对非用户对象调用Get-AzureADUserMembership会触发额外错误。
修正后的脚本
方案1:统一使用AzureAD模块
# 替换为目标组的ObjectId $targetGroupId = "你的组ObjectId" # 获取组内所有用户成员 $groupUsers = Get-AzureADGroupMember -ObjectId $targetGroupId | Where-Object {$_.ObjectType -eq "User"} foreach ($user in $groupUsers) { # 检查用户是否属于ABC开头的组 $matchingGroups = Get-AzureADUserMembership -ObjectId $user.ObjectId | Where-Object {$_.DisplayName -like 'ABC*'} if ($matchingGroups) { [PSCustomObject]@{ 用户名称 = $user.DisplayName 用户ID = $user.ObjectId 匹配的组 = $matchingGroups.DisplayName -join ", " } } }
方案2:统一使用Az模块(推荐,Azure PowerShell最新版本)
# 替换为目标组的ObjectId $targetGroupId = "你的组ObjectId" # 获取组内所有用户成员 $groupUsers = Get-AzADGroupMember -GroupObjectId $targetGroupId | Where-Object {$_.Type -eq "User"} foreach ($user in $groupUsers) { # 检查用户是否属于ABC开头的组 $matchingGroups = Get-AzADUserMembership -ObjectId $user.Id | Where-Object {$_.DisplayName -like 'ABC*'} if ($matchingGroups) { [PSCustomObject]@{ 用户名称 = $user.DisplayName 用户ID = $user.Id 匹配的组 = $matchingGroups.DisplayName -join ", " } } }
核心修正点
- 统一模块:全程使用同一模块(AzureAD或Az),避免认证上下文冲突。
- 传入有效组ID:给
Get-AzADGroupMember/Get-AzureADGroupMember指定具体的组ObjectId。 - 传递正确ID格式:提取成员的
Id(Az模块)或ObjectId(AzureAD模块)字符串属性,而非整个对象。 - 过滤用户成员:只对用户类型的成员执行检查组操作,排除非用户对象。
- 结构化输出:返回清晰的用户与匹配组信息,便于查看结果。
内容的提问来源于stack exchange,提问作者Xu Tower
相关产品推荐
相关产品推荐

