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

ARM模板部署:VSTS PowerShell任务执行Get-Content时遇路径未找到错误

解决VSTS PowerShell任务中读取manifest.json的PathNotFound错误

我之前也碰到过一模一样的问题——本地跑PowerShell脚本完全正常,一放到Azure DevOps(原VSTS)的PowerShell任务里就报路径找不到。核心原因还是本地环境和代理机器的工作目录、文件结构不匹配,给你几个实用的排查和解决方向:

1. 用脚本所在目录构建绝对路径,避开相对路径陷阱

本地运行时,你的工作目录大概率和脚本所在目录一致,但VSTS代理的默认工作目录是流水线的根目录(比如你报错里的C:\XX_work\r7\a\CIBuild\drop\),不是脚本所在的子目录。直接用./manifest.json会在代理的根目录找文件,自然找不到。

修改脚本,用$PSScriptRoot(PowerShell 3.0及以上支持)获取脚本的绝对路径,再拼接manifest.json的路径:

# 获取当前脚本所在的绝对目录
$scriptDirectory = $PSScriptRoot
# 拼接manifest.json的完整路径
$manifestFilePath = Join-Path -Path $scriptDirectory -ChildPath "manifest.json"

# 读取并转换JSON
$manifestDetails = Get-Content $manifestFilePath | ConvertFrom-Json

2. 确认流水线是否正确复制了manifest.json文件

如果代理机器的drop目录里根本没有manifest.json,那肯定会报错。检查你的CI/CD流水线:

  • 查看Copy Files任务的源设置,确保包含了manifest.json(比如源设为**/manifest.json,或者明确指定脚本所在目录下的该文件)
  • 确认Publish Build Artifacts任务把包含manifest.json的目录发布到了drop中,这样发布阶段的代理才能拿到这个文件

3. 检查PowerShell任务的工作目录配置

在VSTS的PowerShell任务设置里,有个「工作目录」选项:

  • 如果这个选项填了值,脚本里的相对路径会基于这个目录,而不是脚本所在目录
  • 可以把「工作目录」设置为脚本所在的路径(比如$(System.DefaultWorkingDirectory)/CIBuild/drop/XX/XX/Deployment),或者直接用前面的绝对路径方法彻底避开这个问题

4. 加日志调试路径问题

如果还是找不到问题,可以在脚本里加几行日志,输出当前工作目录和脚本目录:

Write-Host "当前工作目录: $PWD"
Write-Host "脚本所在目录: $PSScriptRoot"
Write-Host "尝试读取的manifest路径: $manifestFilePath"

然后查看流水线的运行日志,就能清楚看到代理机器上的实际路径,对比manifest.json的实际位置调整路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:25:25