我需要在Windows上使用Puppet安装一些产品。我使用exec recource
exec { 'install':
command => 'C:\\windows\system32\cmd.exe /c "c:\\Program Files\\zabbix_agentd_64.exe --config c:\\Program Files\\zabbix_agentd.conf --install"',
}
语法没问题,但我得到了
'c:/ Program'未被识别为内部或外部命令
我还尝试了command => 'C:\\windows\system32\cmd.exe /c "c:\Program Files\zabbix_agentd_64.exe --config c:\Program Files\zabbix_agentd.conf --install"'
和command => 'C:\\windows\system32\cmd.exe /c "c:\\Program/Files\\zabbix_agentd_64.exe --config c:\\Program/Files\\zabbix_agentd.conf --install"'
但它说语法错误(事实上是正确的)。有什么想法吗?
答案 0 :(得分:2)
Puppet(实际上可能是Ruby下面)将命令字符串拆分为单词而不考虑内部引号。我不认为你可以采取任何措施来阻止这种情况,但有a related issue in Puppet's bug tracker。您可以考虑对该问题进行评论/投票。 应该可以以字拆分的形式指定Exec的命令,作为一个数组,它将为您的问题提供解决方案。
我看到了两种可能的替代方案,让它现在正常运作:
使用目录的8.3名称(请参阅how to get DOS path instead of Windows path)。这可能很棘手,因为我不认为8.3路径是由文件名唯一确定的 - 它可能会受到兄弟文件和目录名称的影响。
为可以找到所需可执行文件的Exec指定PATH,并以简单名称运行它。