Azure DevOps发布任务:PowerShell文件如何使用内置变量?
在Azure DevOps部署组代理的PowerShell文件中使用内置变量的方法
不能直接在PowerShell文件里用$(System.DefaultWorkingDirectory)这类Azure DevOps内置变量的语法——内联脚本是Azure DevOps先解析替换变量后再执行,而本地PS文件是由代理直接运行,不会自动识别替换Azure DevOps的变量语法,这就是你移到文件后找不到路径的原因。
解决方法有两种:
1. 通过任务参数传递变量
在Azure DevOps的PowerShell任务配置中,找到「脚本参数」输入框,把需要的变量作为参数传入:
-WorkingDirectory $(System.DefaultWorkingDirectory)
然后在你的PowerShell文件里定义参数接收并使用:
param( [string]$WorkingDirectory ) # 用接收的参数代替原变量语法 Get-ChildItem -Path $WorkingDirectory
2. 读取环境变量
Azure DevOps会把大部分内置变量注入为代理的环境变量,命名规则是将原变量的点替换为下划线,全部大写。比如System.DefaultWorkingDirectory对应的环境变量是SYSTEM_DEFAULTWORKINGDIRECTORY,可以直接在PS文件里读取:
$workingDir = $env:SYSTEM_DEFAULTWORKINGDIRECTORY # 使用读取到的环境变量路径 Get-ChildItem -Path $workingDir
额外排查提示
部署组代理的工作目录逻辑和普通构建代理略有差异,如果你不确定变量对应的实际路径,可以先加一个内联PowerShell任务输出变量值:
Write-Host "System.DefaultWorkingDirectory: $(System.DefaultWorkingDirectory)" Write-Host "环境变量对应值: $env:SYSTEM_DEFAULTWORKINGDIRECTORY"
对比输出结果和PS文件中使用的路径,确认是否一致。
内容的提问来源于stack exchange,提问作者Maytham Fahmi
相关产品推荐
相关产品推荐

