首页 > 解决方案 > Azure Pipeline:Powershell 任务动态变量询问任务组参数

问题描述

我正在尝试获取最新的测试结果 id 以在 azure devops 中附加我的屏幕截图。我添加了一个 powershell 脚本任务,

在此处输入图像描述

脚本中的一些变量使用是动态的,天蓝色要求我将它们放入任务组参数中,

在此处输入图像描述

我刚刚添加了 123 作为默认值,但此任务因此失败。

脚本:

$AzureDevOpsPAT = "123"
$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($AzureDevOpsPAT)")) }
$UriOrga = "https://dev.azure.com/{org}/{proj}/" 
$uriAccount = $UriOrga + "_apis/test/runs?api-version=6.0"

$response = Invoke-RestMethod -Uri $uriAccount -Headers $AzureDevOpsAuthenicationHeader -Method Get
$testRunsIdSorted = $response.value | sort-object id -Descending
$result = Invoke-RestMethod -Uri https://dev.azure.com/{org}/{proj}/_apis/test/runs/$($testRunsIdSorted[0].id)?api-version=6.0 -Headers $AzureDevOpsAuthenicationHeader -Method Get
Write-Host "results = $($result | ConvertTo-Json -Depth 100)"
Write-Host "##vso[task.setvariable variable=runId]$($result.id | ConvertTo-Json -Depth 100)"

执行后我得到的任务中的错误; 在此处输入图像描述

如何在 powershell 中定义变量?

标签: powershellazure-devopsazure-devops-rest-api

解决方案


看起来您正在将 Powershell $变量访问器添加到任务组参数。您还将一些脚本包装在$()中,这将告诉管道您正在尝试访问任务组变量。这是不正确的。$()管道语法用于访问管道变量,而不是本地 powershell 变量。

例如,这是正确的语法:

Write-Host "$(AzureDevOpsPAT)"

您需要更新参数以使用命名变量而不是 Powershell 变量名称。

我已经更新了您的脚本并更正了变量的使用:

    $AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$(AzureDevOpsPAT)")) }
    $UriOrga = "https://dev.azure.com/{org}/{proj}/" 
    $uriAccount = $UriOrga + "_apis/test/runs?api-version=6.0"

    $response = Invoke-RestMethod -Uri $uriAccount -Headers $AzureDevOpsAuthenicationHeader -Method Get
    $testRunsIdSorted = $response.value | sort-object id -Descending
    $result = Invoke-RestMethod -Uri https://dev.azure.com/{org}/{proj}/_apis/test/runs/$testRunsIdSorted[0].id?api-version=6.0 -Headers $AzureDevOpsAuthenicationHeader -Method Get
    
    $results = $result | ConvertTo-Json -Depth 100
    Write-Host "results = $results"
    Write-Host "##vso[task.setvariable variable=runId]$result.id"

请注意,在替换当前内容后,您需要返回任务组属性并重置 PAT 的默认值。之后,您需要更新管道以在使用此任务时设置AzureDevOpsPAT参数。


推荐阅读