Azure devops VSTS(Azure DevOps)管道中的动态变量名

Azure devops VSTS(Azure DevOps)管道中的动态变量名,azure-devops,azure-powershell,Azure Devops,Azure Powershell,我有一个管道变量,名为TestVariable 我可以通过PS脚本轻松访问此变量,如下所示: write-host $(TestVariable) 但是,如果该变量的名称是动态的,有什么方法可以从PS访问变量值吗 例如,变量的名称将进入字符串变量。我尝试了这些组合作为实验…它们只返回变量名,而不是值(毫不奇怪): 我想答案是否定的,但我想确定。非常感谢任何帮助 编辑注释 两个答案都回答了问题,但不能解决我的问题。在尝试了这些解决方案之后,我意识到我错过了一个额外的复杂问题,不幸的是,这些问题的

我有一个管道变量,名为
TestVariable

我可以通过PS脚本轻松访问此变量,如下所示:

write-host $(TestVariable)
但是,如果该变量的名称是动态的,有什么方法可以从PS访问变量值吗

例如,变量的名称将进入字符串变量。我尝试了这些组合作为实验…它们只返回变量名,而不是值(毫不奇怪):

我想答案是否定的,但我想确定。非常感谢任何帮助

编辑注释 两个答案都回答了问题,但不能解决我的问题。在尝试了这些解决方案之后,我意识到我错过了一个额外的复杂问题,不幸的是,这些问题的答案对解决这些问题没有帮助。我在这里记下,以防有人试图做类似的事情

额外的复杂性是,变量的值是在发布期间设置的(我试图访问ARM模板输出变量)

我想我可以点击API并获取“live”变量值,但不幸的是,在发布完成之前,发布数据(来自API)并不存在

因此,当我在发布期间调用此选项时:

{company}/{project}/_api/release/release/$($releaseId)?api版本=5.0


我得到“ID为38的版本不存在”。

这在YAML中不可能直接实现,但您可以使用例如az cli。有了它,您可以通过编程设置一个变量名并获取它的值

$variableName=“一些”
az管道变量列表--组织”https://dev.azure.com/thecodemanual--项目“DevOps Manual”--管道名称“DevOps Manual CI”--查询($variableName+'.value'))
$variableName=“测试”
az管道变量列表--组织”https://dev.azure.com/thecodemanual--项目“DevOps Manual”--管道名称“DevOps Manual CI”--查询($variableName+'.value'))
现在,您可以在powershell任务中使用此代码来获取变量的值


您有如何安装扩展的信息。

这在YAML中不可能直接实现,但您可以使用例如az cli。有了它,您可以通过编程设置一个变量名并获取它的值

$variableName=“一些”
az管道变量列表--组织”https://dev.azure.com/thecodemanual--项目“DevOps Manual”--管道名称“DevOps Manual CI”--查询($variableName+'.value'))
$variableName=“测试”
az管道变量列表--组织”https://dev.azure.com/thecodemanual--项目“DevOps Manual”--管道名称“DevOps Manual CI”--查询($variableName+'.value'))
现在,您可以在powershell任务中使用此代码来获取变量的值

您有如何安装扩展的信息

VSTS(Azure DevOps)管道中的动态变量名

同意Krzysztof Madej的观点。没有现成的方法来实现这一点

这是因为(比如
$($varname)
在构建管道中还不受支持

要解决此问题,可以使用获取动态变量的值:

GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.1
下面是我的测试powershell脚本:

$varname="TestVariable"

$url = "https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/<definitionsId>?api-version=5.0"

Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}


$VFDV= $pipeline.variables.$varname.value


Write-Host This is Value For Dynamic Variable: $VFDV
$varname=“TestVariable”
$url=”https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/?api-版本=5.0“
写入主机“URL:$URL”
$pipeline=Invoke RestMethod-Uri$url-Headers@{
Authorization=“Bearer$env:SYSTEM\u ACCESSTOKEN”
}
$VFDV=$pipeline.variables.$varname.value
Write Host这是动态变量的值:$VFDV

输出:

希望这有帮助

VSTS(Azure DevOps)管道中的动态变量名

同意Krzysztof Madej的观点。实现这一点没有现成的方法

这是因为(比如
$($varname)
在构建管道中还不受支持

要解决此问题,可以使用获取动态变量的值:

GET https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.1
下面是我的测试powershell脚本:

$varname="TestVariable"

$url = "https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/<definitionsId>?api-version=5.0"

Write-Host "URL: $url"
$pipeline = Invoke-RestMethod -Uri $url -Headers @{
    Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}


$VFDV= $pipeline.variables.$varname.value


Write-Host This is Value For Dynamic Variable: $VFDV
$varname=“TestVariable”
$url=”https://dev.azure.com/YourOrganizationName/YourtProjectName/_apis/build/definitions/?api-版本=5.0“
写入主机“URL:$URL”
$pipeline=Invoke RestMethod-Uri$url-Headers@{
Authorization=“Bearer$env:SYSTEM\u ACCESSTOKEN”
}
$VFDV=$pipeline.variables.$varname.value
Write Host这是动态变量的值:$VFDV

输出:


希望这有帮助。

晚会迟到了,但我想和大家分享一下这个数字

如中所述,管道变量可以通过 环境变量。虽然在任务开始之前处理$(varname),但可以在运行中调用$env:varname。因此,您可以使用以下方法进行欺骗:

Write-Host ('$env:'+"$(varname)" | Invoke-Expression)
任务将在任务开始之前将$(varname)解析为其值

Write-Host ("$env:TestVariable" | Invoke-Expression)
它将发出与调用$(TestVariable)相同的结果


虽然你确实需要遵守规则,比如“和”。“->”

派对迟到,但我还是愿意分享这个数字

如中所述,管道变量可以通过 环境变量。虽然在任务开始之前处理$(varname),但可以在运行中调用$env:varname。因此,您可以使用以下方法进行欺骗:

Write-Host ('$env:'+"$(varname)" | Invoke-Expression)
任务将在任务开始之前将$(varname)解析为其值

Write-Host ("$env:TestVariable" | Invoke-Expression)
它将发出与调用$(TestVariable)相同的结果


尽管您确实需要遵守规则,例如“和”。“->”.

问题如何?下面的答案是否解决了您的问题,如果是,您可以接受它作为答案,这样它可以帮助其他遇到相同问题的社区成员,我们可以存档此线程,谢谢。如果不是,请告诉我们您是否需要进一步的帮助。看起来很有希望,明天将有时间测试。谢谢!两者都有答案值得打勾,因为它们都有效,这只是选择使用哪种方法。问题如何?下面的答案是否解决了您的问题,如果是,您可以接受它作为答案,这样它可以帮助其他社区成员解决同样的问题,我们可以存档此线程,谢谢。如果不是,请让我们知道您是否愿意