GitHub Action中PowerShell Az模块加载失败及Azure连接报错问题
解决GitHub Action中PowerShell调用Azure Key Vault的Az模块加载问题
问题概述
在GitHub Action的PowerShell脚本中,已执行Install-Module -Name Az -scope currentuser -force -AllowClobber和Import-Module Az,但调用Connect-AzAccount时提示Az.Accounts模块无法加载,手动导入该模块又报错Assembly with same name is already loaded,无法完成Azure服务主体登录及Key Vault信息拉取。
解决方案
1. 改用GitHub Action官方Azure登录动作(推荐)
GitHub Action提供官方azure/login动作,无需手动安装/管理Az模块,彻底规避版本冲突和加载问题:
- name: Azure Login uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }}
其中AZURE_CREDENTIALS是存储在GitHub Secrets中的服务主体JSON,格式示例:
{ "clientId": "你的应用ID", "clientSecret": "你的服务主体密码", "tenantId": "你的租户ID" }
完成登录后可直接调用Az模块命令,无需手动导入。
2. 手动管理Az模块的调整方案
若必须在PowerShell脚本内处理模块,按以下步骤修改:
- 先清理环境中残留的Az模块:
Uninstall-Module -Name Az -AllVersions -Force -ErrorAction SilentlyContinue Uninstall-Module -Name Az.Accounts -AllVersions -Force -ErrorAction SilentlyContinue
- 指定稳定版本安装Az模块,避免兼容问题:
Install-Module -Name Az -RequiredVersion 9.6.0 -Scope CurrentUser -Force -AllowClobber
- 强制导入指定版本的模块:
Import-Module Az -RequiredVersion 9.6.0 -Force -ErrorAction Stop
- 执行服务主体登录:
$TenantID = "你的租户ID" $securePassword = "你的服务主体密码" | ConvertTo-SecureString -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential("你的应用ID", $securePassword) Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant $TenantID
3. 规避Runner预装模块冲突
GitHub托管Runner可能预装旧版Az模块,导致与手动安装的版本冲突。可先移除预装模块的加载路径,再导入手动安装的版本:
# 移除预装模块的路径 $env:PSModulePath = ($env:PSModulePath -split ';' | Where-Object { $_ -notlike "*Program Files\WindowsPowerShell\Modules*" }) -join ';' # 强制导入手动安装的模块 Import-Module Az -Force
问题根因
出现Assembly with same name is already loaded错误,是因为GitHub Runner环境预装了Az.Accounts模块,手动安装的新版本模块与预装版本的程序集名称重复,导致加载冲突。官方azure/login动作会自动处理模块环境,从根源避免这类问题。
内容的提问来源于stack exchange,提问作者grzy7316x
相关产品推荐
相关产品推荐

