Azure DevOps Azure PowerShell 任务输出变量

won*_*ity 2 azure-powershell azure-devops

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

我正在使用一个 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"
Run Code Online (Sandbox Code Playgroud)

我正在尝试将 $groupInfos 存储到 azureADGroups 变量中。

在此处输入图片说明

但是当我在下一步中在同一作业下运行 PowerShell 任务时,它说无法识别术语“azureADGroup”.. 好像变量没有设置..有谁知道我在这里遗漏了什么?

Jac*_*Jia 10

我在您的脚本中发现了 3 个问题:

  1. 您不需要设置引用名称。

  2. 在写变量命令之前有一个返回。因此,不会执行写入变量命令。

  3. write variable 命令只能使用单行字符串。但是, $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 "
Run Code Online (Sandbox Code Playgroud)

从调试日志中,我们可以检查变量“azureADGroupsFromString”是否设置成功。

在此处输入图片说明

更新:

您可以在下一个 PS 任务中使用以下脚本:

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

输出:

在此处输入图片说明

更新:

如果您想通过参数将其传递给下一个 PS 任务,请将变量用单引号括起来。这样,它将被视为一个字符串。