Windows 上的 Puppet 代理除非按照我的想法工作?

Windows 上的 Puppet 代理除非按照我的想法工作?

好的,我花了好几天的时间追查这个问题。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}\"",
}

相关内容