Windows puppet执行命令文件路径

3

我想知道在Puppet(Windows代理)中是否可能使用变量存储文件名的值,然后将此变量值添加到执行的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个回答

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 解析,因此在该字符串内部还需要转义任何双引号,例如 \"copy 而不是 "copy。

希望这可以帮到您。


谢谢,Mateusz。但是它没有起作用:警告:文件 /etc/puppet/environments/production/blah../blah... 中的转义序列 '\c' 无法识别。 - SuperVertrix
Puppet 的哪个版本? - ferventcoder
我更新了答案,你们两个在添加到位置(c:\temp)之前都关闭了对 cmd.exe /c 的引号。因此,如果您尝试传递的命令实际上在 Puppet 外部执行,它可能会更好地工作。 ;) - ferventcoder
@Fr3edom21 如果这个答案可以接受,请将其接受为答案。谢谢! - ferventcoder

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.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接