我想知道在puppet(windows agent)中是否有可能变量保存文件名的值,然后将此变量值添加到exec windows cmd.exe命令中? 即我试图将文件从共享驱动器复制到c:\ temp,如下所示:
$setup_msi = "myprogram.msi"
exec { 'copy_MSI_c:\temp':
command => 'C:\\windows\system32\cmd.exe /c "copy i:\\data\\${setup_msi}" c:\\temp'
}
但是当windows puppet代理运行时,puppet会解析$ setup_msi变量名本身,而不是解析变量所包含的值。我希望它会解析它:C:\ windows \ system32 \ cmd.exe / c" copy i:\ data \ myprogram.msi c:\ temp"
任何帮助都会非常感激。
感谢。
Fr3edom21。
答案 0 :(得分:2)
命令字符串包含在单引号内,这就是变量不被替换的原因。
您的代码应为
$setup_msi = "myprogram.msi"
exec { 'copy_MSI_c:\temp':
command => "C:\\windows\system32\cmd.exe /c \"copy i:\\data\\${setup_msi} c:\\temp\""
}
由于使用双引号意味着字符串本身将由puppet解析,因此还必须转义该字符串中的任何双引号,因此\"复制而不是"复制。
希望这有帮助。
答案 1 :(得分:0)
花了太多时间让这个工作起来后,我发现了一个像这样的解决方法:
$setup_msi = "i:\\data\\myprogram.msi"
exec { 'copy_MSI_c:\temp':
command => "C:\\windows\\system32\\cmd.exe /c copy ${setup_msi} c:\\temp",
}
Fr3edom21。