Windows Puppet 代理 - 程序包清单 - 额外的斜线

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 似乎都会在双引号前添加一个斜线。

运行“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,而不仅限于所提到的提供商)。

相关内容