Передать многострочный параметр в скрипт powershell - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть сборка TeamCity с параметром текста приглашения, и я передаю его в сценарий powershell (с помощью программы запуска PowerShell, с файлом сценария и режимом выполнения «Выполнить .ps1 из внешнего файла»).Аргумент сценария выглядит следующим образом:

-MyParameter1 "%myparameter1%"
-MyParameter2 "%myparameter2%"

Пользователь, инициирующий сборку, может ввести многострочный параметр.Пример ниже:

multiline test
second line
3rd line

И в этом случае я получаю ошибку:

Не удается найти позиционный параметр, который принимает аргумент «проверить вторую строку 3-й строки».

В журнале 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 голосов
/ 13 февраля 2019

Возможное решение.Перед выполнением необходимого сценария PowerShell добавьте шаг с встроенным PowerShell в TeamCity:

$param2 = @'
%myparameter2%
'@
$param2 = [System.Text.Encoding]::UTF8.GetBytes($param2)
$param2 = [System.Convert]::ToBase64String($param2)
Write-Output "##teamcity[setParameter name='myparameter2' value='$param2']"

Этот сценарий заменит параметр сборки myparameter2 его представлением base64.Вы можете передать его как обычный параметр скрипту, а затем выполнить декодирование base64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...