DevOps Azure - установка и использование переменных в скриптах PowerShell - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть конвейер сборки 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 не печатается в операторе «Задать переменную среды» и 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 и просмотрел документы.Тем не менее, это просто не работает.Я не понимаю, что я делаю не так.Может кто-нибудь показать мне, как это исправить и объяснить, что я делаю не так?Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Сценарий 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 голосов
/ 14 сентября 2018

Чтобы установить переменные среды, вам нужно установить его с помощью

$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

...