Azure Automation系统托管身份执行VM关机作业挂起报登录错误
故障现象
- Azure Automation Account 启用系统分配托管标识(System Managed Identity)执行虚拟机关机作业时,进程挂起,抛出需执行
Login-AzureRmAccount完成登录的报错 - 参考公开技术指引尝试运行
Update-ModulesInAutomationToLatestVersion升级模块修复问题时,升级流程本身抛出报错,无法执行完成 - 交叉验证结果:
- 同一份关机脚本使用AzureRunAsConnection身份运行时无异常
- 单独编写测试脚本验证系统分配托管标识登录能力时,可正常完成登录,也能成功拉取资源组名称
- 详细报错信息见对应操作截图
根因说明
- 模块混用冲突:报错核心原因是脚本中保留了旧版AzureRM模块的命令调用。AzureRM模块的
Login-AzureRmAccountcmdlet 原生不支持Automation托管标识认证参数,托管标识无交互登录是Az模块(对应cmdlet为Connect-AzAccount -Identity)提供的能力,只要脚本执行流触发AzureRM cmdlet调用,就会抛出未登录错误。单独测试登录能成功,是因为测试脚本仅调用了Az模块的认证逻辑,未触发AzureRM模块的身份校验。 - 模块升级失败通常由三类问题触发:
- Automation Account配置的PowerShell运行时版本与待升级模块版本不兼容,例如PowerShell 5.1运行时拉取了仅支持PowerShell 7+的模块包
- Automation Account托管标识缺少模块写入权限,或所在网络的访问策略阻断了到PowerShell Gallery的请求
- 账户内已安装的旧版AzureRM模块与Az模块存在依赖版本冲突,导致升级流程中断回滚。
修复方案
按以下顺序操作即可解决问题:
- 清理冲突模块
进入Automation Account的模块管理页,批量删除所有名称以AzureRM.开头的旧版模块,不要使用Update-ModulesInAutomationToLatestVersion执行批量升级,避免版本冲突。 - 手动导入兼容的Az模块
从模块库手动导入稳定版Az模块,优先导入Az.Accounts、Az.Compute两个核心依赖模块,导入时匹配账户配置的PowerShell运行时版本:PowerShell 5.1运行时选择5.x系列Az模块,PowerShell 7.2运行时可选择最新正式版本。 - 修正脚本认证逻辑
将脚本开头的认证段替换为托管标识适配的Az认证逻辑,全局替换所有AzureRM cmdlet为对应Az cmdlet:# 禁用上下文自动保存,避免跨作业上下文污染 Disable-AzContextAutosave -Scope Process # 使用系统分配托管标识完成认证 Connect-AzAccount -Identity # 后续虚拟机关机操作使用Az命令,例如Stop-AzVM,禁止调用Stop-AzureRmVM等旧版命令 - 权限配置
为Automation Account的系统分配托管标识授予目标虚拟机所在范围的虚拟机参与者RBAC权限,避免权限不足导致操作失败。 - 验证
先在作业测试窗格执行Get-AzVM验证认证与模块调用正常,再运行完整关机作业即可。
内容的提问来源于stack exchange,提问作者Uday Kiran
相关产品推荐
相关产品推荐

