在自定义VSTS PowerShell脚本任务中使用特殊字符

时间:2018-07-19 14:45:06

标签: powershell azure-devops msbuild-task

我目前面临的问题是,我想在VSTS构建过程中将我的AssemblyInfo的版权动态设置为如下所示:

  

©2012-2018公司名称

,但应将2018设置为动态代表当前年份。 因此,我试图将全局构建变量设置为如下所示:

  

©2012-$(Date:yyyy)公司名称

在这里版权特殊字符可以正常工作,但是日期在此处不起作用,所以我接下来要做的就是使用内联脚本进行自定义PowerShell脚本构建任务。 这次我再次将全局变量(“版权”)设置为

  

-在构建过程中设置-

,并且在嵌入式脚本中,我尝试替换如下所示的值:

$date=$(Get-Date -Format yyyy);
$_Copyright = "© 2012-$date Company Name";
Write-Host "##vso[task.setvariable variable=Copyright]$_Copyright";

现在我可以使用动态日期了,但是在运出的dll上 “ c 2012-2018公司名称” 加上“ c”而不是“©”。

所以我将其替换为[char] 0x00A9:

$date=$(Get-Date -Format yyyy);
$_Copyright = [char]0x00A9 + " 2012-$date Company Name";
Write-Host "##vso[task.setvariable variable=Copyright]$_Copyright";

但是结果没有变化: “ c 2012-2018公司名称”

尽管在我的本地计算机上,PowerShell为[char] 0x00A9赋予了'©'符号。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我可以重现此问题。

似乎logging command无法识别符号©。因此,我们无法通过以下命令将包含©的变量设置为值:

Write-Host "##vso[task.setvariable variable=Copyright]$_Copyright"

在您的情况下,您可以尝试以下解决方法:

1,使用Copyright (c)代替Copyright ©,日志记录命令可以识别字符串(c)

$date=$(Get-Date -Format yyyy);
$_Copyright = "(c) 2012-$date Company Name";
Write-Host "##vso[task.setvariable variable=Copyright]$_Copyright";

2,合并变量:

1)设置全局构建变量,例如:$(Symbol)并将©设置为值

2)使用日志记录命令设置日期变量:

$date=$(Get-Date -Format yyyy);
$Company= "2012-$date Company Name";
Write-Host "##vso[task.setvariable variable=Company]$Company";

3)一起使用变量$(Symbol)$(Company),以获取整个版权字符串。

或者,您可以直接使用©$(Company)来检查是否有效。