Назад | Перейти на главную страницу

Агент Windows Puppet - манифест пакета - лишние косые черты

Я пытаюсь использовать Puppet для установки приложения, которое требует, чтобы параметры передавались в базовый MSI определенным образом.

Пример:

package { 'Vendor Application':
  ensure => '8.4.12.0',
  source => 'C:\setup.exe',
  install_options => '/S /v"REBOOTPROMPT=Supress"'
}

Я заметил, что не имеет значения, использую ли я двойные кавычки для install_options и избегаю внутренних двойных кавычек или пользовательских одинарных кавычек, кажется, что каждый раз, когда Puppet добавляет косую черту перед двойной кавычкой.

См. Ниже вывод --debug после запуска "puppet apply test.pp"

Debug: Executing: 'cmd.exe /c start "puppet-install" /w "C:\setup.exe" "/S /v\"REBOOTPROMPT=Supress\""'

Кто-нибудь еще сталкивался с этим и придумал, как предотвратить добавление лишней косой черты?

Спасибо!

Puppet автоматически добавляет кавычки, если в них есть пробелы. install_options. Это сделано намеренно. Однако это совершенно нежелательно, если вы хотите точно контролировать, как передается ввод, что почти каждый раз, когда вы используете install_options. Из-за автоматического цитирования он добавляет \ чтобы избежать существующих кавычек, что также является нежелательным поведением в Windows.

Итак, ваш ресурс здесь:

package { 'Vendor Application':
  ensure => '8.4.12.0',
  source => 'C:\setup.exe',
  install_options => '/S /v"REBOOTPROMPT=Supress"'
}

Следует передать так:

package { 'Vendor Application':
  ensure          => '8.4.12.0',
  source          => 'C:\setup.exe',
  install_options => ['/S', '/v"REBOOTPROMPT=Suppress"'],
}

Исправления форматирования не требуются, но следуйте инструкциям Руководство по стилю кукол. Также исправлена ​​опечатка (REBOOTPROMPT=Подавить).

Более того, скорее всего, вам нужно будет установить его так, поскольку он будет проходить через cmd.exe /c (как вы видели выше):

package { 'Vendor Application':
  ensure          => '8.4.12.0',
  source          => 'C:\setup.exe',
  install_options => ['"', '/S', '/v""REBOOTPROMPT=Suppress""', '"'],
}

Если вы действительно хотите глубоко понять, как определить, что нужно сдать install_options, читать параметры установки в кавычках или пробелах (это относится к любому использованию install_options, а не только с упомянутым провайдером).