Exec onlyif注册表值不存在

* *编辑 **

我找到了一个解决方案:

class add_route { exec { "route_to_internal_network": command => "C:\Windows\System32\ROUTE.EXE add 192.168.5.254 mask 255.255.255.255 10.5.5.5 -p", unless => "C:\Windows\System32\reg.exe query HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes /f 192.168.5.254,255.255.252.0,10.5.5.5,1", } } 

我会留下这篇文章以防其他人遇到类似的问题

* *编辑 **


我正在尝试编写一个puppet清单,为我的一些Windows主机服务器添加一个持久的静态路由。 到目前为止,我正在考虑创建一个类:

 class add_route { exec { "route_to_internal_network": command => "C:\Windows\System32\ROUTE.EXE add 192.168.5.254 mask 255.255.255.255 10.5.5.5 -p", } } 

但是,每当木偶客户端与木偶主人签入时,此清单将执行命令。

我希望在我的class级中使用onlyif ,但在尝试检查包含我的路由的缺少注册表值时似乎有点混乱。 这是最好的方法吗? 还有其他想法吗?

我想我需要做的事情如下:

 class add_route { exec { "route_to_internal_network": command => "C:\Windows\System32\ROUTE.EXE add 192.168.5.254 mask 255.255.255.255 10.5.5.5 -p", onlyif => ??? } } 

我希望我的onlyif声明能匹配

 C:\Windows\System32\reg.exe query HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes /f '192.168.5.254,255.255.255.255,10.5.5.5,1' 

如果上述命令的结果是:

搜索结束:找到0个匹配项。

但是,我认为onlyif只是寻找返回代码,因此无论是否找到此值,命令都会成功完成。

有谁知道如何检查木偶清单中是否缺少注册表值?

我找到了一个解决方案:

 class add_route { exec { "route_to_internal_network": command => "C:\Windows\System32\ROUTE.EXE add 192.168.5.254 mask 255.255.255.255 10.5.5.5 -p", unless => "C:\Windows\System32\reg.exe query HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes /f 192.168.5.254,255.255.255.255,10.5.5.5,1", } } 

我会留下这篇文章以防其他人遇到类似的问题