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 个问题:
您不需要设置引用名称。
在写变量命令之前有一个返回。因此,不会执行写入变量命令。
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 任务,请将变量用单引号括起来。这样,它将被视为一个字符串。
| 归档时间: |
|
| 查看次数: |
7182 次 |
| 最近记录: |