Azure PowerShell按许可证筛选用户加入安全组脚本报错如何解决
错误原因
- 核心问题是
Get-MsolUser返回的MSOL模块专属用户对象无法直接被Add-AzureADGroupMember识别为合法输入,后者需要明确传入用户的ObjectId作为RefObjectId参数值,直接传递整个用户对象会触发参数匹配失败。 - 你使用的MSOnline、AzureAD两个模块的对象传递规则不兼容,直接管道传递会触发绑定错误。
修正后脚本
写法1:分步骤遍历(更易调试)
# 筛选持有指定许可证的所有用户,加-All避免大租户下结果截断 $licensedUsers = Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match "DEVELOPERPACK_E5"} # 目标安全组ID $targetGroupId = "c1ec272d-e0d2-496c-ba65-602e7d822c75" # 逐个将用户添加到组 foreach ($user in $licensedUsers) { Add-AzureADGroupMember -ObjectId $targetGroupId -RefObjectId $user.ObjectId }
写法2:管道简化写法
Get-MsolUser -All | Where-Object {($_.licenses).AccountSkuId -match "DEVELOPERPACK_E5"} | ForEach-Object { Add-AzureADGroupMember -ObjectId c1ec272d-e0d2-496c-ba65-602e7d822c75 -RefObjectId $_.ObjectId }
前置检查项
运行脚本前需要确认:
- 已分别执行
Connect-MsolService、Connect-AzureAD完成两个模块的身份验证 - 当前登录账号拥有租户用户读取、安全组成员管理的对应权限
内容的提问来源于stack exchange,提问作者LockTheTaskBar
相关产品推荐
相关产品推荐

