Azure DevOps Выходная переменная задачи Azure PowerShell - PullRequest
0 голосов
/ 11 июля 2019

enter image description here enter image description here enter image description here

Я создаю конвейер выпуска, используя одну задачу Azure PowerShell и задачу PowerShell. В задаче Azure Powershell у меня есть следующий код

$groupInfos = @()
for ([int]$i = 0; $i -lt $azureADGroupsObj.Count)
{
    $groupInfo = New-Object PSObject
    $groupInfo | Add-Member -MemberType NoteProperty -Name "displayName" -Value $azureADGroupsObj[$i].DisplayName
    $groupInfo | Add-Member -MemberType NoteProperty -Name "Id" -Value 
    $azureADGroupsObj[$i].Id
    $groupInfos += $groupInfo
    $i++
}
return $groupInfos
Write-Host "##vso[task.setvariable variable=azureADGroups;]$groupInfos"

Я пытаюсь сохранить переменную $ groupInfos в переменной azureADGroups.

enter image description here

но когда я запускаю задачу PowerShell на следующем шаге под тем же заданием, он говорит, что термин "azureADGroup" не распознан ... похоже, что переменная не установлена ​​... кто-нибудь знает, что я здесь пропускаю?

1 Ответ

2 голосов
/ 11 июля 2019

Я обнаружил в вашем скрипте 3 проблемы:

  1. Вам не нужно указывать имя ссылки.

  2. Перед командой записи переменной есть возврат.Таким образом, команда записи переменной не будет выполнена.

  3. Команда записи переменной может использовать только однострочную строку.Тем не менее, $ groupInfos является объектом.Он не будет неявно преобразован в строку.Вам нужно использовать команду "ConvertTo-Json -Compress", чтобы преобразовать ее в строку.

Я тестировал на своем конвейере:

$groupInfosString = $groupInfos | ConvertTo-Json -Compress
write-host $groupInfos
write-host $groupInfosString 
Write-Host "##vso[task.setvariable variable=azureADGroups;]$groupInfos"
Write-Host "##vso[task.setvariable variable=azureADGroupsFromString;]$groupInfosString "

Из журнала отладки, мы можем проверить, что переменная "azureADGroupsFromString" успешно установлена.

enter image description here

Обновление:

Вы можете использовать следующий скрипт в следующей задаче PS:

$objs = '$(azureADGroupsFromString)' | ConvertFrom-Json
foreach( $obj in $objs){
    Write-Host ("displayName:{0} Id:{1}" -f $obj.displayName, $obj.Id)
} 

Вывод:

enter image description here

Обновление:

Если вы хотите передать его следующей задаче PS через аргументы, пожалуйста,заключите переменную в одинарные кавычки.Таким образом, он будет рассматриваться как строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...