Хорошо, я целыми днями гонялся за этим. Есть ли проблема с марионеточным агентом 3.7.1 x64 в Windows 7 x64, когда исполнители с «если» никогда НЕ запускают команду? Я пробовал делать пакетный пример:
if => "Список источников 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']],
}
Мой скрипт возвращает 1, если он находит текст 'chocolatey [disabled]' в выводе списка источников choco (текстовое совпадение НЕ чувствительно к регистру) ... Итак ... это НЕ должно запускаться, если
c:\TEMP\AutoitScripts\chocolatey>choco source list
Chocolatey v0.9.9.6
chocolatey [Disabled] - https://chocolatey.org/api/v2/
но вроде всегда запускается ... Баг есть? Я просто очень запутался?
Чтобы использовать |, вы должны использовать оболочку, встроенную в cmd.exe / C: https://docs.puppetlabs.com/windows/troubleshooting.html#shell-builtins
См. Пример ниже:
exec { 'configure_timezone':
command => "tzutil.exe /s \"${timezone}\"",
unless => "cmd.exe /C tzutil.exe /g | findstr /C:\"${timezone}\"",
}