Azure DevOps - 在PowerShell脚本中设置和使用变量

问题描述 投票:2回答:2

我有一个Azure DevOps构建管道,它有两个单独的PowerShell脚本。在第一个脚本中,我从XML文件中获取值并在环境变量中设置该值。在我的第二个脚本中,我想使用环境变量中的值。不幸的是,我没有看到环境变量设置。这时,我有:

脚本1:

$myXml = [xml](Get-Content ./MyXml.xml)  
$departmentId = $myXml.Department.Id

Write-Host ##vso[task.setvariable variable=DepartmentId;]$departmentId    
Write-Host "Set environment variable to ($env:DepartmentId)"

Get-ChildItem Env:

Write-Host "Department Id ($departmentId)"

当脚本1运行时,我看到:

Set environment variable to ()
[All of the environment variable BUT, I DO NOT SEE ONE NAMED "DepartmentId"]
Department Id (1)

注意:1)$env:DepartmentId值不在“Set environment variable”语句中打印,2)DepartmentId值未列在环境变量列表中。我的意图是在第二个脚本中使用DepartmentId,如下所示:

脚本2:

Write-Host "Using Department: $(env:DepartmentId)"

这时,脚本只显示:

env:DepartmentId : The term 'env:DepartmentId' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

我已经看过其他相关的SO问题并审阅了文档。但是,这根本不起作用。我不明白我做错了什么。有人可以告诉我如何解决这个问题并解释我做错了什么?谢谢!

powershell azure-devops azure-pipelines
2个回答
6
投票

脚本1

通过task.setvariable设置环境变量时使用引号,因为#表示PowerShell注释。您已注释掉要输出的字符串。

另请注意,环境变量可能在您设置它的脚本中不可用,因为管道必须首先在输出中处理task.setvariable

$myXml = [xml](Get-Content ./MyXml.xml)  
$departmentId = $myXml.Department.Id

Write-Host "##vso[task.setvariable variable=DepartmentId;]$departmentId"
Write-Host "Set environment variable to ($env:DepartmentId)"

Get-ChildItem Env:

Write-Host "Department Id ($departmentId)"

脚本2

您仍然必须通过表达式中的$引用变量。你在$之前缺少env

Write-Host "Using Department: $($env:DepartmentId)"

0
投票

要设置环境变量,您需要使用它来设置它

$env:departmentId = $myXml.Department.Id

在字符串中使用变量时,您仍然需要变量前面的$符号。如在

Write-Host "Using Department: $($env:DepartmentId)"

环境变量看起来与get-childItem不同的原因是你实际列出了一个psprovider,而不是访问变量。

Get-ChildItem Env:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment_variables?view=powershell-6

© www.soinside.com 2019 - 2024. All rights reserved.