psake вызывает msdeploy.cmd с параметром, содержащим амперсанд - PullRequest
3 голосов
/ 20 сентября 2011

У меня есть сценарий psake для управления развертыванием, процесс выглядит следующим образом:

  1. Скомпилируйте и запустите тесты
  2. Создайте пакет развертывания с помощью msbuild
  3. Проверьте, развертываем ли мы внутреннее или внешнее
  4. Если внутреннее, запустите сгенерированный файл cmd
  5. , если внешний, запросите имя пользователя и пароль и запустите сгенерированный файл cmd с именем пользователя и паролем какпараметры

Я выполняю msdeploy следующим образом при внешнем развертывании:

exec { & $deploy_cmd /Y /M:$msdeploy_url /U:$user /P:$pwd /A:NTLM }

Когда пароль содержит амперсанд (&), тогда файл cmd, я полагаю, когдаПрисвоение параметра переменной назначает часть пароля перед & и пытается выполнить часть позже.Что такое поведение файла bat (& используются для разделения команд).

Я пытался экранировать пароль с помощью каретки (^) во время запроса пароля, но это не сработало.

Кроме смены пароля, есть ли другие альтернативы?

1 Ответ

0 голосов
/ 02 сентября 2017

Поскольку файл cmd анализирует параметры и затем передает их снова в виде необработанных строк, единственный способ, которым я получил | Символ для работы с паролем означает тройное экранирование с ^^^ перед некоторыми специальными символами. Я предполагаю и буду работать аналогично. Или вы можете просто экранировать все символы в пароле:

    $pwd = $pwd -replace '.','^^^$&'
...