Windows puppet exec命令文件路径

时间:2015-03-25 01:21:41

标签: windows puppet

我想知道在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。

2 个答案:

答案 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。