Azure Automation中用系统托管身份调用Get-CsPhoneNumberAssignment遇401未授权
解决Azure Automation托管身份运行
Get-CsPhoneNumberAssignment的401未授权问题 关键排查与修复步骤
- 升级Teams PowerShell模块版本:你当前使用的5.6.0版本对部分
*-cs系列cmdlet的应用身份支持存在局限性,建议升级至6.0.0及以上版本——微软后续版本优化了Skype for Business后端相关cmdlet的应用身份验证逻辑。 - 补全针对性管理员角色:
- 除Teams管理员角色外,必须为托管身份分配Skype for Business Online管理员角色(注意是Online版本,非本地Skype角色)。
*-cs系列cmdlet本质依赖Skype for Business的权限体系,仅Teams管理员角色无法覆盖其权限要求。 - 避免使用全局读取者这类宽泛角色,针对性分配权限能减少权限冲突风险。
- 除Teams管理员角色外,必须为托管身份分配Skype for Business Online管理员角色(注意是Online版本,非本地Skype角色)。
- 确认Graph权限配置正确性:
- 确保
Organization.Read.All是应用权限而非委派权限,且已完成管理员同意操作。 - 无需分配所有Graph权限,仅保留必要的应用权限即可,冗余权限可能触发不必要的权限校验问题。
- 确保
- 调整Runbook中的身份验证逻辑:
- 使用托管身份获取令牌时,需指定Skype for Business的资源URI(国际版为
https://api.skypeforbusiness.com,国内版或特定区域需对应调整),而非仅指向Graph资源。示例代码:$token = (Get-AzAccessToken -ResourceUrl "https://api.skypeforbusiness.com").Token Connect-MicrosoftTeams -AccessToken $token Get-CsPhoneNumberAssignment
- 使用托管身份获取令牌时,需指定Skype for Business的资源URI(国际版为
- 检查租户迁移状态:若租户是从Skype for Business迁移至Teams的,需确认已完成全租户升级,未完成升级的租户会限制应用身份访问
*-cs类cmdlet。
额外验证动作
- 先在本地环境用服务主体模拟托管身份的权限,运行
Get-CsPhoneNumberAssignment测试,排除Azure Automation环境本身的问题。 - 查看Azure活动日志中托管身份的权限请求记录,确认是否有明确被拒绝的权限项,再针对性补充。
内容的提问来源于stack exchange,提问作者DaVixon
相关产品推荐
相关产品推荐

