如何使用PowerShell提供程序使用unless子句来获取Puppet exec资源以确定是否已禁用Chocolatey源?

问题描述 投票:3回答:1

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。

windows powershell puppet chocolatey
1个回答
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]')

UPDATE for the PowerShell One Liner

您可以使用分号分隔语句,因此这应该提供您所需要的

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,
}

Update 2 - Chocolatey provider adding configuration support

这对你现在没有什么帮助,但未来添加的是https://tickets.puppetlabs.com/browse/PUP-3428

要点是:

chocolatey::source {'name':
  location => '',
  ensure => present|absent,
  enabled => true|false,
  username => '',
  password => '',
}

哪个应该适当地降低配置choco的工作量。

Update 3 - Chocolatey provider configuration support

我在Update 2中提到过,提供程序会添加配置支持。源位处于PR模式并正常工作 - https://github.com/chocolatey/puppet-chocolatey/pull/79/files

Update 4 - Chocolatey provider - chocolateysource

回到2016年,Chocolatey模块在支持Puppet(puppetlabs / chocolatey)下移动,并添加了配置设置,功能和源支持。在https://forge.puppet.com/puppetlabs/chocolatey找到它

© www.soinside.com 2019 - 2024. All rights reserved.