Puppet启动windows上存在的服务

Puppet启动windows上存在的服务,puppet,Puppet,我正在寻找清单,以便在windows server上启动服务(如果该服务存在)。 我想检查一个服务的条件,如果该文件存在 service { 'test service': ensure => 'running', enable => true, unless => 'if((test-path "C:\Program Files\test1") -or (test-path "C:/Program Files/test2")){ exit 0 } else

我正在寻找清单,以便在windows server上启动服务(如果该服务存在)。 我想检查一个服务的条件,如果该文件存在

service { 'test service':
   ensure => 'running',
   enable => true,
   unless  => 'if((test-path "C:\Program Files\test1") -or (test-path "C:/Program Files/test2")){ exit 0 } else { exit 1 }',
   provider => powershell,}
上述代码返回一个错误,除非是无效参数。还有其他检查方法吗?
非常感谢

服务资源似乎没有支持条件包含的参数。Puppet也没有一种简单的方法来检查我所知道的客户端上是否存在文件。我通过创建一个自定义事实来解决这个问题,该事实检查了我需要的条件,然后将资源包装在一个除非块中:

unless $facts['test_file_exists'] {
  service { 'test service':
    ensure => 'running',
    enable => true,
  }
由于自定义事实可以用任何可以将“key=value”对输出到stdout的语言编写,因此您可以将现有powershell代码作为事实使用,只需稍作更改:

if((test-path "C:\Program Files\test1") -or (test-path "C:\program Files\test2")){
      write-host "test_file_exists=true
}
else{
    write-host "test_file_exists=false"
}

有几种不同的方法可以将事实分发到客户端系统。我更喜欢将事实放入一个模块,让pluginsync为我分发。如果不想将其包含在模块中,则必须找到某种方法将powershell代码转换为C:\ProgramData\PuppetLabs\facter\facts.d\中,并在末尾使用正确的.ps1扩展名

非常感谢你的回答。您能告诉我我们应该在模块中的什么位置放置客户事实吗/在puppet master中的etc/puppet/test module/facts.d?我们可以放置power shell脚本或ruby是必需的吗?没问题,它会出现在://facts.d/中,我还应该提到,您需要至少有puppet 3.4才能工作