exec
每次都会运行。当我手动执行unless
子句时,它退出0.
exec { 'disablepublicchocolatey':
command => "C:/ProgramData/chocolatey/choco.exe source disable -n=chocolatey",
unless => "C:/ProgramData/chocolatey/choco.exe source list | findstr -i 'chocolatey [Disabled]'",
require => Exec['chocolatelyinstall'],
provider => powershell,
}
有没有更好的方法来检查Chocolatey源是否已被禁用?字符串匹配不够健壮吗?
仅供参考,Windows 7 x64。
答案 0 :(得分:2)
我相信如果您使用常规的exec提供程序,这将有效。
exec { 'disablepublicchocolatey':
command => "C:/ProgramData/chocolatey/choco.exe source disable -n=chocolatey",
unless => "cmd /c C:/ProgramData/chocolatey/choco.exe source list | findstr -i 'chocolatey [Disabled]'",
require => Exec['chocolateyinstall'],
}
如果使用PowerShell,则应将输出分配给变量,然后查询输出字符串是否包含您要查找的内容:
$sourceOutput = choco.exe source list
$sourceOutput.Contains('chocolatey [Disabled]')
您可以使用分号分隔语句,因此这应该提供您需要的内容
exec { 'disable_public_chocolatey':
command => "C:/ProgramData/chocolatey/choco.exe source disable -n=chocolatey",
unless => "\$sourceOutput = choco.exe source list; if (\$sourceOutput.Contains('chocolatey [Disabled]')) {exit 0} else {exit 1}",
require => Exec['chocolatelyinstall'],
provider => powershell,
}
这对您现在没有任何帮助,但将来添加的内容是https://tickets.puppetlabs.com/browse/PUP-3428
要点是:
chocolatey::source {'name':
location => '',
ensure => present|absent,
enabled => true|false,
username => '',
password => '',
}
这应该会降低适当配置choco的工作量。
我在更新2中提到过,提供程序会添加配置支持。源位处于PR模式并正常工作 - https://github.com/chocolatey/puppet-chocolatey/pull/79/files
回到2016年,Chocolatey模块在支持Puppet(puppetlabs / chocolatey)下移动,并添加了配置设置,功能和源支持。在https://forge.puppet.com/puppetlabs/chocolatey
找到它