我正在尝试使用 Puppet 安装一个应用程序,该应用程序需要以特定方式将参数传递给底层 MSI。
例子:
package { 'Vendor Application':
ensure => '8.4.12.0',
source => 'C:\setup.exe',
install_options => '/S /v"REBOOTPROMPT=Supress"'
}
我注意到,如果我对 install_options 使用双引号并转义内部双引号或用户单引号,则无关紧要,每次 Puppet 似乎都会在双引号前添加一个斜线。
运行“puppet apply test.pp”后的--debug输出如下
Debug: Executing: 'cmd.exe /c start "puppet-install" /w "C:\setup.exe" "/S /v\"REBOOTPROMPT=Supress\""'
还有其他人遇到过这种情况并知道如何防止添加额外的斜线吗?
谢谢!
答案1
当 中有空格时,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"'],
}
不需要进行格式修复,但请遵循Puppet 风格指南。还修正了一个拼写错误(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
,而不仅限于所提到的提供商)。