如何通过嵌入式PowerShell命令设置Azure Devops管道变量?

时间:2020-02-21 22:30:12

标签: powershell azure-devops

我有一个Azure Devops构建yaml文件,其中包含以下任务:

  - task: PowerShell@2
    displayName: 'Set coverage variable'
    inputs:
      targetType: 'inline'
      script: Write-Host "##vso[task.setvariable variable=coverage]Get-Content .\coverage\lcov-report\summary.txt"

我希望此任务将变量coverage设置为summary.txt内容的值。但是,在以下任务中访问变量时,我看到该变量实际上是字符串Get-Content .\coverage\lcov-report\summary.txt

文档中似乎没有关于如何实现此目标的示例。这仅仅是脚本的限制吗?我是否必须将Get-Content命令设置为变量,然后访问该变量?

谢谢!

2 个答案:

答案 0 :(得分:3)

请在$之后使用$()。

示例:

##vso[task.setvariable variable=coverage]$(Get-Content .\coverage\lcov-report\summary.txt)"

答案 1 :(得分:0)

实际上,已记录在案。但是在我们的官方文档中可能不太明显:)您可以找到相关文档here

重要

包含文件路径的预定义变量将转换为适当的样式(Windows样式C:\ foo \与Unix样式/ foo /) 基于代理主机类型和外壳类型。如果您正在运行bash Windows上的脚本任务,您应该使用环境变量 访问这些变量而不是管道变量的方法 方法,以确保文件路径样式正确。

由于您使用的是管道变量,因此'Get-Content .\coverage\lcov-report\summary.txt'作为字符串类型返回的值是预期的行为。

但是$()接受变量而不是字符串。使用$(Get-Content .\coverage\lcov-report\summary.txt)

此后,在下面的任务中,使用下面的简单方法读取值。

Write-Host No problem reading $env:coverage