Powershell 在TFS中的多个发布任务中设置和使用环境变量

Powershell 在TFS中的多个发布任务中设置和使用环境变量,powershell,tfs,release-management,Powershell,Tfs,Release Management,我有一个使用TFS构建和发布的web应用程序。发布定义包含一个任务组,其中包含部署web应用程序的所有必要步骤 我想做的是确定一个特定的值并将其存储在一个变量中,以便稍后在其他发布任务的发布过程中使用 此时,de任务组中的第一步是Powershell任务,该任务确定必要的值并使用以下命令将其存储在环境变量中: Write-Output ("##vso[task.setvariable variable=MyVar;]$var") 当我在下一个任务(同样是PowerShell任务)中使用此环境变

我有一个使用TFS构建和发布的web应用程序。发布定义包含一个任务组,其中包含部署web应用程序的所有必要步骤

我想做的是确定一个特定的值并将其存储在一个变量中,以便稍后在其他发布任务的发布过程中使用

此时,de任务组中的第一步是Powershell任务,该任务确定必要的值并使用以下命令将其存储在环境变量中:

Write-Output ("##vso[task.setvariable variable=MyVar;]$var")
当我在下一个任务(同样是PowerShell任务)中使用此环境变量时,它会按照预期运行,使用:

Write-Host "Doing stuf for: $env:MyVar"
当我想使用变量作为(多个)不同任务的参数时,它变得奇怪。当环境变量没有默认值时,将使用第一个PowerShell任务中的计算值,一切正常。但是TFS不喜欢环境变量没有默认值,并且在能够再次保存发布定义之前强制提供一个默认值。当我提供默认值时,使用变量作为任务参数的任务使用默认值,而不是计算值。我希望应该使用计算值,因为第二个PowerShell任务确保正确存储计算值

因此,我看到的症状是:

  • 如果不提供默认值,脚本中的代码以及任务参数将使用计算出的值
  • 提供默认值时,脚本中的代码使用计算值,任务参数使用默认值

我是否做错了什么,或者我是否使用了错误的环境变量,是否应该使用其他方法?

据我所知,您希望在任务组内的powershell任务中定义变量,但您也被迫在环境变量中提供值,使变量有时在powershell中设置值,有时在环境变量中定义值

解决方案是只提供环境变量本身的名称,因此它总是被您在powershell任务中设置的值覆盖

来源
在标题“什么是setvariable日志记录命令以及如何将其用于任务组?”下,引用了三个场景。听起来第二种方案可能适合您的需要。

据我所知,您希望在任务组内的powershell任务中定义变量,但您也被迫在环境变量中提供一个值,导致变量有时在powershell中设置了值,有时需要在环境变量中定义值

解决方案是只提供环境变量本身的名称,因此它总是被您在powershell任务中设置的值覆盖

来源
在标题“什么是setvariable日志记录命令以及如何将其用于任务组?”下,引用了三个场景。听起来第二种情况可能适合您的需要。

我不确定您所说的具有“默认值”的环境变量是什么意思。(环境变量要么有值,要么不存在。)@Bill_Stewart它存在于任务组中,但当您在发布定义中使用该任务组时,TFS希望您为其提供一个值。我假设,因为我在任务参数中也使用该变量,TFS需要一个默认值,以便它知道值始终可用“您的意思是,变量是用特定的值定义/设置的。(从您的描述中我不清楚。)不确定我理解您所说的具有“默认值”的环境变量是什么意思。(环境变量要么有值,要么不存在。)@Bill_Stewart它存在于任务组中,但当您在发布定义中使用该任务组时,TFS希望您为其提供一个值。我假设,因为我在任务参数中也使用该变量,TFS需要一个默认值,以便它知道值始终可用“您的意思是,变量是用特定的值定义/设置的。(从你的描述中我不清楚。)这是我的解决方案!非常感谢。这是我的解决方案!非常感谢。