Azure DevOps托管Ubuntu管道报错:‘pwsh.exe’未被识别
问题分析与解决
核心问题
报错日志里的路径C:\azagent\A1\_work\1\ci\drop\pipeline-scripts\check-health.ps1直接说明:你的管道实际在Windows代理上运行,而非你指定的ubuntu-latest环境。尽管YAML里声明了ubuntu-latest,但当前组织的代理池配置存在问题,导致任务被分配到了Windows代理,而该代理未安装PowerShell 7(对应可执行文件pwsh.exe),因此触发错误。
解决方案
1. 核查代理池配置
- 进入当前DevOps组织的项目设置 → 代理池
- 找到
ubuntu-latest对应的代理池,查看代理列表,确认所有代理均为Linux系统 - 若代理池混有Windows代理,立即移除或重新配置代理池,确保仅包含Linux节点
2. 强制指定正确的代理池(可选)
如果默认的ubuntu-latest代理池配置混乱,可以直接指定专属的Linux代理池:
pool: name: '你的Linux专属代理池名称' vmImage: 'ubuntu-latest' # 保证代理池系统与vmImage匹配
3. 修复Windows代理的PowerShell 7环境(若必须用Windows代理)
如果业务需求必须在Windows代理上运行该任务,需确保代理已安装PowerShell 7:
- 手动在Windows代理上安装PowerShell 7;
- 或在管道中添加前置步骤自动安装:
- task: PowerShell@2 displayName: '安装PowerShell 7' inputs: targetType: 'inline' script: | winget install --id Microsoft.PowerShell --source winget pwsh: false # 先用系统自带的Windows PowerShell执行安装
4. 确认管道顶层的池配置
检查YAML管道最顶层是否正确声明了vmImage: ubuntu-latest,避免被其他配置覆盖:
trigger: - main pool: vmImage: 'ubuntu-latest' # 确保该行存在且未被注释 steps: - task: PowerShell@2 displayName: 'Say hello' inputs: targetType: 'inline' script: | Write-Host "Hello" workingDirectory: '$(Pipeline.Workspace)' pwsh: true
内容的提问来源于stack exchange,提问作者Alexander Schmidt
相关产品推荐
相关产品推荐

