将多行参数传递给Powershell脚本

时间:2019-02-13 15:19:23

标签: powershell teamcity

我有一个带有提示文本参数的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脚本?

1 个答案:

答案 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解码。