好的,我花了好几天的时间追查这个问题。Windows 7 x64 上的 puppet agent 3.7.1 x64 是否存在问题,即带有“unless”的 execs 永远不会不运行该命令?我尝试执行批处理示例:
除非 => "C:/ProgramData/chocolatey/choco.exe 源列表 | findstr -i 'chocolatey [Disabled]'",
Powershell 和现在已编译的 AutoIT 可执行文件:
exec { 'disablepublicchocolatey':
command => "C:/ProgramData/chocolatey/choco.exe source disable -n=chocolatey",
unless => 'c:/ProgramData/puppetfiles/checkifexists.exe repo "chocolatey [disabled]"',
require => [Exec['chocolatelyinstall'],File['checkifexists.exe']],
}
如果我的脚本在 choco 源列表的输出中找到文本“chocolatey [disabled]”(文本匹配不区分大小写),则返回 1...因此...如果
c:\TEMP\AutoitScripts\chocolatey>choco source list
Chocolatey v0.9.9.6
chocolatey [Disabled] - https://chocolatey.org/api/v2/
但它似乎总是运行... 有错误吗?我只是很困惑吗?
答案1
要使用管道命令|
,您必须使用shell 内置命令使用 cmd.exe /C 解决:
请参阅以下示例:
exec { 'configure_timezone':
command => "tzutil.exe /s \"${timezone}\"",
unless => "cmd.exe /C tzutil.exe /g | findstr /C:\"${timezone}\"",
}