PowerShell 7.3.x中无法安装Az模块的问题咨询
问题分析与解决方案
冲突原因
你遇到的问题本质是PowerShell模块路径的共享特性导致的命令检测冲突:
- PowerShell 7和5.1会共享部分系统/用户级模块目录(比如
C:\Program Files\WindowsPowerShell\Modules或C:\Users\<你的用户名>\Documents\WindowsPowerShell\Modules)。 - 虽然你没在PowerShell 7中显式导入AzureRM 5.7.0,但安装Az模块时,
Install-Module会扫描所有PSModulePath下的可用命令,发现AzureRM里的Login-AzAccount等命令与Az.Accounts模块的命令重名,因此触发冲突提示。 - 微软的AzureRM与Az共存规则是指两者可以在同一PowerShell版本中通过显式指定模块导入来避免运行时冲突,但安装阶段的命令检测逻辑不会区分模块所属的PowerShell版本。
解决方案
1. 强制安装(快速解决)
直接在安装命令中添加-AllowClobber参数,允许覆盖检测到的同名命令:
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force -AllowClobber
安装完成后,若要确保使用Az模块的命令而非AzureRM,可显式导入Az模块并禁用名称检查:
Import-Module -Name Az -DisableNameChecking -Force
2. 隔离PowerShell 7的模块路径(彻底避免冲突)
通过修改PowerShell 7的模块路径,排除包含AzureRM的目录,让安装命令仅扫描PS7专属的模块目录:
- 打开PowerShell 7的配置文件:
notepad $PROFILE - 在配置文件中添加以下内容(重启PS7后生效):
# 移除包含AzureRM的模块路径条目 $env:PSModulePath = ($env:PSModulePath -split ';' | Where-Object { $_ -notlike '*AzureRM*' }) -join ';' - 保存配置文件后重启PowerShell 7,再执行原安装命令即可。
3. 验证安装结果
安装完成后,可通过以下命令确认命令来自Az模块:
Get-Command Login-AzAccount | Select-Object Name, Source
输出的Source字段应为Az.Accounts而非AzureRM.Profile。
内容的提问来源于stack exchange,提问作者Brent Arias
相关产品推荐
相关产品推荐

