我有一个带有提示文本参数的TeamCity构建,并将其传递到Powershell脚本中(通过使用PowerShell运行器,脚本文件和执行模式“从外部文件执行.ps1”)。脚本参数如下所示:
-MyParameter1 "%myparameter1%"
-MyParameter2 "%myparameter2%"
构建发起用户可以输入多行参数。下面的示例:
multiline test
second line
3rd line
在这种情况下,我得到一个错误:
找不到一个接受参数'test的位置参数 第二行第三行”。
在TeamCity日志中,我看到下一个命令:
Command: C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe
PowerShell arguments: -NoProfile, -NonInteractive, -ExecutionPolicy, ByPass, -File, C:\BuildAgent\work\***\MyScript.ps1, -MyParameter1, "1578", -MyParameter2, "multiline test, second, line, 3rd, line"
Script.ps1中的参数定义:
[Parameter(Mandatory=$true)]
[String]$MyParameter2,
TeamCity版本:2018.1.1
如何将多行参数传递给Powershell脚本?
答案 0 :(得分:0)
可能的解决方案。在执行必要的PowerShell脚本之前,在TeamCity中使用内联PowerShell添加步骤:
$param2 = @'
%myparameter2%
'@
$param2 = [System.Text.Encoding]::UTF8.GetBytes($param2)
$param2 = [System.Convert]::ToBase64String($param2)
Write-Output "##teamcity[setParameter name='myparameter2' value='$param2']"
此脚本将用其base64表示形式替换构建参数myparameter2
。您可以将其作为常规参数传递给脚本,然后进行base64解码。