You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Automation系统托管身份执行VM关机作业挂起报登录错误

故障现象
  • Azure Automation Account 启用系统分配托管标识(System Managed Identity)执行虚拟机关机作业时,进程挂起,抛出需执行Login-AzureRmAccount完成登录的报错
  • 参考公开技术指引尝试运行Update-ModulesInAutomationToLatestVersion升级模块修复问题时,升级流程本身抛出报错,无法执行完成
  • 交叉验证结果:
    • 同一份关机脚本使用AzureRunAsConnection身份运行时无异常
    • 单独编写测试脚本验证系统分配托管标识登录能力时,可正常完成登录,也能成功拉取资源组名称
    • 详细报错信息见对应操作截图
根因说明
  1. 模块混用冲突:报错核心原因是脚本中保留了旧版AzureRM模块的命令调用。AzureRM模块的Login-AzureRmAccount cmdlet 原生不支持Automation托管标识认证参数,托管标识无交互登录是Az模块(对应cmdlet为Connect-AzAccount -Identity)提供的能力,只要脚本执行流触发AzureRM cmdlet调用,就会抛出未登录错误。单独测试登录能成功,是因为测试脚本仅调用了Az模块的认证逻辑,未触发AzureRM模块的身份校验。
  2. 模块升级失败通常由三类问题触发:
    • Automation Account配置的PowerShell运行时版本与待升级模块版本不兼容,例如PowerShell 5.1运行时拉取了仅支持PowerShell 7+的模块包
    • Automation Account托管标识缺少模块写入权限,或所在网络的访问策略阻断了到PowerShell Gallery的请求
    • 账户内已安装的旧版AzureRM模块与Az模块存在依赖版本冲突,导致升级流程中断回滚。
修复方案

按以下顺序操作即可解决问题:

  1. 清理冲突模块
    进入Automation Account的模块管理页,批量删除所有名称以AzureRM.开头的旧版模块,不要使用Update-ModulesInAutomationToLatestVersion执行批量升级,避免版本冲突。
  2. 手动导入兼容的Az模块
    从模块库手动导入稳定版Az模块,优先导入Az.Accounts、Az.Compute两个核心依赖模块,导入时匹配账户配置的PowerShell运行时版本:PowerShell 5.1运行时选择5.x系列Az模块,PowerShell 7.2运行时可选择最新正式版本。
  3. 修正脚本认证逻辑
    将脚本开头的认证段替换为托管标识适配的Az认证逻辑,全局替换所有AzureRM cmdlet为对应Az cmdlet:
    # 禁用上下文自动保存,避免跨作业上下文污染
    Disable-AzContextAutosave -Scope Process
    # 使用系统分配托管标识完成认证
    Connect-AzAccount -Identity
    # 后续虚拟机关机操作使用Az命令,例如Stop-AzVM,禁止调用Stop-AzureRmVM等旧版命令
    
  4. 权限配置
    为Automation Account的系统分配托管标识授予目标虚拟机所在范围的虚拟机参与者RBAC权限,避免权限不足导致操作失败。
  5. 验证
    先在作业测试窗格执行Get-AzVM验证认证与模块调用正常,再运行完整关机作业即可。

内容的提问来源于stack exchange,提问作者Uday Kiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:57:30