在 Powershell 任务中使用变量,内联脚本
Using variable in Powershell task, inline script
我正在尝试编写一个非常简单的 inline 脚本,它应该将变量 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 在线/VSTS 告诉我脚本何时运行:
The term 'newVar' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
以这种方式使用变量似乎在脚本文件中很常见并且适用于命令行。
那么我如何才能在 VSO/VSTS 中完成这个简单的变量赋值(具有连接值)作为构建任务?
根据评论,问题是因为 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"
我正在尝试编写一个非常简单的 inline 脚本,它应该将变量 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 在线/VSTS 告诉我脚本何时运行:
The term 'newVar' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
以这种方式使用变量似乎在脚本文件中很常见并且适用于命令行。
那么我如何才能在 VSO/VSTS 中完成这个简单的变量赋值(具有连接值)作为构建任务?
根据评论,问题是因为 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"