如果未设置TFS构建变量,如何退回到默认值?

时间:2018-10-17 10:30:23

标签: powershell tfs

我想创建一个Powershell脚本,该脚本可以在构建代理程序上下文中的TFS上和本地执行。在TFS上,各种predefined build variables都可用,例如$(Build.SourcesDirectory)。同时,该脚本在源代码树中也可用,因此我希望能够在未设置这些变量的本地运行它。我发现要恢复为默认值的最短方法是,下面的Try..Catch块具有令人不安的长异常类型:

Try {
    $SourcesDirectory = $(Build.SourcesDirectory)
}
Catch [System.Management.Automation.CommandNotFoundException] {
    $SourcesDirectory = "..\..\Local\Path\To\Sources\Directory"
}

Write-Output $SourcesDirectory

是否有一种“更精细”的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

当然,您可以使用简单的inline-if语句。我不确定$(Build.SourcesDirectory)是否有副作用,但是对于$env:BUILD_SOURCESDIRECTORY来说,它应该起作用:

$sourcesDirectory = if($env:BUILD_SOURCESDIRECTORY) { $env:BUILD_SOURCESDIRECTORY } else { "..\..\Local\Path\To\Sources\Directory" }

答案 1 :(得分:1)

您可以将变量添加到本地环境变量中:

  • 以管理员身份打开CMD
  • 运行以下命令:setx Build.SourcesDirectory "C:\Path"

enter image description here

现在变量也可以在本地计算机上使用,而无需try/catchif/else,使用变量$env:BUILD_SOURCESDIRECTORY运行PowerShell脚本,它将在本地计算机中运行机器以及构建过程中。

无论如何,您应该使用$env:BUILD_SOURCESDIRECTORY而不是$(Build.SourcesDirectory)来使其在构建中起作用。