升级PowerShell Az模块后,传统Azure服务管理命令无法正常使用
解决Az模块与经典Azure服务管理模块共存的问题
你遇到的这个问题其实挺常见的——Az模块和旧的Azure服务管理模块(用来操作经典云服务这类资源)确实存在依赖冲突,因为服务管理模块依赖AzureRM.Profile,而Az和AzureRM模块根本不能在同一个PowerShell会话里同时加载。我来给你拆解下原因和可行的解决方案:
为什么会报错?
当你卸载了所有AzureRM模块后,运行Get-AzureService时,服务管理模块会尝试加载它依赖的AzureRM.Profile模块,但这个模块已经被你卸载了,所以就抛出了「目标调用异常」。而如果你更新Azure模块,它会自动安装AzureRM.Profile,但这个模块和Az模块的Az.Profile会在环境里冲突,导致两边都用不了。
可行的解决方案:会话隔离
目前微软还没有把经典服务管理的命令迁移到Az模块里,所以操作经典资源必须用旧的Azure模块。解决冲突的核心思路是把Az模块和服务管理模块放在完全独立的PowerShell会话里使用,具体步骤如下:
1. 处理Az模块操作(ARM资源)
- 打开一个全新的PowerShell窗口(普通或管理员权限都可以)
- 直接运行
Connect-AzAccount登录你的Azure账号 - 在这里执行所有Az相关的命令(比如
Get-AzVM、New-AzResourceGroup等),不要导入任何Azure/AzureRM模块,完全用Az的命令集。
2. 处理经典服务管理操作(比如云服务)
- 再打开一个全新的PowerShell窗口(和上面的窗口完全分开)
- 如果还没安装服务管理模块,先运行:
这个命令会自动安装依赖的Install-Module -Name Azure -Force -AllowClobberAzureRM.Profile,但不用担心,只要这个会话里不加载Az模块,就不会冲突。 - 运行
Add-AzureAccount登录你的Azure账号(注意是Add-AzureAccount,不是Az的Connect-AzAccount) - 现在就可以正常运行
Get-AzureService、Set-AzureService这类经典服务管理命令了。
关键注意事项
- 绝对不要在同一个PowerShell会话里同时加载Az和AzureRM/Azure模块,哪怕你尝试用
Remove-Module卸载其中一个,也可能残留冲突的组件导致报错。 - 如果需要在两类操作之间切换,直接关闭当前会话,打开新的会话即可,这是最稳妥的方式。
- 如果你担心模块版本混乱,可以用
Get-Module -ListAvailable查看已安装的模块,确认Az和AzureRM的模块都存在,但只要不同会话加载就没问题。
内容的提问来源于stack exchange,提问作者RMD
相关产品推荐
相关产品推荐

