仅当注册表值不存在时才执行

man*_*art 5 ruby puppet

* *编辑**

我通过玩弄找到了一个解决方案:

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",
        }
}
Run Code Online (Sandbox Code Playgroud)

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

* *编辑**


我正在尝试编写一个 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",
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,此清单将在每次 puppet 客户端与 puppet master 签入时执行该命令。

我希望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 => ???
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望我的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'
Run Code Online (Sandbox Code Playgroud)

如果上述命令的结果是:

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

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

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

man*_*art 3

我通过玩找到了解决方案:

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",
        }
}
Run Code Online (Sandbox Code Playgroud)

如果其他人遇到类似的问题,我会保留这篇文章