可以在 Azure DevOps“变量组”中定义数组变量吗

wen*_*nbo 6 azure devops azure-devops azure-pipelines

我想在Azure devops“变量组”中定义一些变量,这些变量将在Powershell中使用,但是当变量类型是字符串时它可以工作,但有些是数组或对象出错了。我的看起来像下面。左边是名字,右边是

vmAlertedArray_backup => @("wbubuntu","wbubuntu2")

1.当我使用azure devops脚本时,它出错了

$vmAlertedArray_backup = $env:vmAlertedArray_backup foreach($c in $vmAlertedArray_backup){ Write-Host "$c" }

2.在本地作品中的powershell中

$vmAlertedArray_backup = @("wbubuntu","wbubuntu2") foreach($c in $vmAlertedArray_backup){ Write-Host "$c" }

任何人都可以展示一些这方面的经验吗?谢谢

Jac*_*Jia 6

建议仅将变量作为字符串传递。如果要将对象传递给其他任务,可以使用“ConvertTo-Json -Compress”将其转换为 json 字符串。

$objectString = $object | ConvertTo-Json -Compress
Write-Host "##vso[task.setvariable variable=objectString;]$objectString"
Run Code Online (Sandbox Code Playgroud)

在下一个 PS 任务中,您可以将其作为环境变量传递。但是,请将变量用单引号引起来。

在此输入图像描述

然后您可以使用“ConvertFrom-Json”将字符串转换为对象。

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


小智 6

我只是将变量作为字符串传递,然后将其拆分以在 PowerShell 中创建一个数组

变量 = 产品 1、产品 2、产品 3

$array = $variable.Split(',)
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以在末尾添加修剪,以防有空格

变量 = 产品 1、产品 2、产品 3

$array = $workspaces.Split(',').trim()
Run Code Online (Sandbox Code Playgroud)