Som*_*ser 9 powershell azure-devops azure-pipelines
我有一个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)"
Run Code Online (Sandbox Code Playgroud)
运行脚本1时,我看到:
Set environment variable to ()
[All of the environment variable BUT, I DO NOT SEE ONE NAMED "DepartmentId"]
Department Id (1)
Run Code Online (Sandbox Code Playgroud)
注意:1)该$env:DepartmentId值未在“设置环境变量”语句中打印,并且2)该DepartmentId值未在环境变量列表中列出。我的意图是DepartmentId在第二个脚本中使用它,如下所示:
脚本2:
Write-Host "Using Department: $(env:DepartmentId)"
Run Code Online (Sandbox Code Playgroud)
此时,脚本仅显示:
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.
Run Code Online (Sandbox Code Playgroud)
我看过其他相关的SO问题,并查看了文档。但是,这根本行不通。我不明白我在做什么错。有人可以告诉我如何解决此问题并解释我做错了什么吗?谢谢!
Dan*_*son 14
脚本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)"
Run Code Online (Sandbox Code Playgroud)
剧本2
您仍然必须通过$表达式内部引用变量。你$以前不见了env。
Write-Host "Using Department: $($env:DepartmentId)"
Run Code Online (Sandbox Code Playgroud)
要设置环境变量,您需要使用
$env:departmentId = $myXml.Department.Id
Run Code Online (Sandbox Code Playgroud)
在字符串中使用变量时,变量前面仍然需要 $ 符号。如在
Write-Host "Using Department: $($env:DepartmentId)"
Run Code Online (Sandbox Code Playgroud)
get-childItem 的环境变量看起来不同的原因是您实际上列出的是 psprovider,而不是访问该变量。
Get-ChildItem Env:
Run Code Online (Sandbox Code Playgroud)