我想创建一个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
是否有一种“更精细”的方法来实现这一目标?
答案 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)