Puppet:使用unless-option的条件exec

时间:2015-02-25 11:32:53

标签: windows command-line registry puppet

Puppet版本为3.7,OS为Windows 7。

我正在尝试创建只有在某些Windows注册表值不存在时才会执行的Puppet exec。我正在尝试使用这样的代码:

exec { 'example':
            path => 'C:\Windows\System32',
            command => 'something',
            unless => 'reg query "HKEY_LOCAL_MACHINE\Software\My key" /f 5.1',
}

如果我在命令行上使用reg query,我会得到:

C:\>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\My key" /f 5.1
HKEY_LOCAL_MACHINE\SOFTWARE\My key REG_SZ 5.1
End of search: 1 match(es) found.
C:\>echo %errorlevel%
0

由于结果此命令为0且unless仅在结果不为0时才应执行,因此命令不应执行。但是每次都会执行它。

我也尝试过使用unless => 'cmd.exe /C reg query "HKEY_LOCAL_MACHINE\Software\My key" /f 5.1',,但每次都会执行命令。

此处的类似问题表明这种方式应该有效:Exec onlyif registry value is not present

我在这里做错了什么?

编辑:调试显示Puppet根本找不到密钥:

Debug: Exec[update](provider=windows): Executing check 'reg query "HKLM\SOFTWARE\My key" /f 5.1'
Debug: Executing 'reg query "HKLM\SOFTWARE\My key" /f 5.1'
Debug: /Stage[main]/Example/Exec[update]/unless: ERROR: The system was unable to find the specified registry key or value.

如果我在命令行上运行相同的reg query命令,它会找到如上所示的密钥。

2 个答案:

答案 0 :(得分:1)

确保您不受registry redirectionfile system redirection的约束。通常就是这种情况 - 如果您使用的是64位Windows操作系统,则最好使用64位版本的Puppet。

我们在troubleshooting中注意到了文件系统重定向器和变通方法。我们也谈过registry redirection for custom facts。在您的情况下,当您尝试呼叫c:\windows\system32\cmd.exe时,可能需要进行文件系统重定向。

缺点是,您应该确保使用64位版本的cmd.exe,该版本位于c:\windows\sysnativec:\windows\system32$system32事实从with Puppet 3.7.3开始解决:

exec { 'example':
  path => "$system32',
  command => 'something',
  unless => 'reg query "HKEY_LOCAL_MACHINE\Software\My key" /f 5.1',
}

答案 1 :(得分:0)

一般提示,之前当我们遇到同样的问题时,我们在注册表项名称(可能还有空格字符)中转义了反斜杠以使其工作。

    exec { 'example':
                path => 'C:\Windows\System32',
                command => 'something',
                unless => 'reg query \"HKEY_LOCAL_MACHINE\\SOFTWARE\\My\ key\" /f 5.1',
    }

另外,如果你想使用与“cmd”相同的内容,如下所示:

exec { "example":
                command => "something",
                unless => 'cmd /c "C:\\Windows\\System32\\reg.exe query \"HKEY_LOCAL_MACHINE\\SOFTWARE\\My\ key\" /f 5.1"',
	}