在Powershell任务中使用变量,内联脚本

时间:2017-05-15 19:59:07

标签: powershell azure-devops azure-pipelines-build-task

我正在尝试编写一个非常简单的内联脚本,该脚本应将变量 NameSuffix 更新为新值。我想使用本地辅助变量 newVar

Write-Host "Detected version: $(AssemblyInfo.AssemblyVersion)";
$newVar = "v$(AssemblyInfo.AssemblyVersion.Major).$(AssemblyInfo.AssemblyVersion.Minor).$(AssemblyInfo.AssemblyVersion.Build).$(AssemblyInfo.AssemblyVersion.Release)";
Write-Output ("##vso[task.setvariable variable=NameSuffix;]$(newVar)");

但是Visual Studio Online / VSTS告诉我什么时候运行:

  

术语' newVar'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。   检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

以这种方式使用变量在脚本文件中很常见,并且可以在命令行上运行。

那么如何在VSO / VSTS中完成这个简单的变量赋值(带有一个连接值)作为构建任务?

1 个答案:

答案 0 :(得分:1)

根据评论,问题是因为newvar$newvar来正确引用该变量。 $()部分是子表达式运算符,当您有一个非简单的单个变量要扩展为字符串时(例如访问变量的属性),它通常在String中使用。

在这种情况下,您的变量很简单,因此您可以取消我认为的子表达式运算符。同样,我不确定是否需要外括号或分号,将代码简化为:

Write-Host "Detected version: $(AssemblyInfo.AssemblyVersion)"
$newVar = "v$(AssemblyInfo.AssemblyVersion.Major).$(AssemblyInfo.AssemblyVersion.Minor).$(AssemblyInfo.AssemblyVersion.Build).$(AssemblyInfo.AssemblyVersion.Release)"
Write-Output "##vso[task.setvariable variable=NameSuffix;]$newVar"