Chef infra 具有自定义GUID的Windows防火墙的Chef Guard

Chef infra 具有自定义GUID的Windows防火墙的Chef Guard,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我可以使用Chef和Powershell创建自定义Windows防火墙规则。我对not_if有问题 我在这里使用了注册表项方法: 自定义防火墙规则创建具有随机GUID的注册表项。我无法使用这些方法,因为我不知道密钥名称。每个节点上的键值相同,但键名不同 下面的工作。但是自定义密钥具有密钥名称的GUID execute "enableMSDTCFirewall" do command "netsh advfirewall firewall set rule group=\"Dis

我可以使用Chef和Powershell创建自定义Windows防火墙规则。我对not_if有问题

我在这里使用了注册表项方法:

自定义防火墙规则创建具有随机GUID的注册表项。我无法使用这些方法,因为我不知道密钥名称。每个节点上的键值相同,但键名不同

下面的工作。但是自定义密钥具有密钥名称的GUID

execute "enableMSDTCFirewall" do
        command "netsh advfirewall firewall set rule group=\"Distributed Transaction Coordinator\" new enable=yes"
        action :run
        not_if { registry_data_exists?("HKLM\\SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules", {:name => 'MSDTC-In-TCP', :type => :string, :data => "v2.20|Action=Allow|Active=TRUE|Dir=In|Protocol=6|App=%SystemRoot%\\system32\\msdtc.exe|Name=@FirewallAPI.dll,-33503|Desc=@FirewallAPI.dll,-33506|EmbedCtxt=@FirewallAPI.dll,-33502|"})}
end
除了一个标志之外,我无法找到另一种方法来检查规则是否存在,以及在每次客户端运行期间是否执行脚本。有什么想法吗

以这个工作结束

execute "enableFirewallRuleNameOutbound" do
    command "powershell.exe New-NetFirewallRule -DisplayName \"RuleName\" -Direction Outbound -LocalPort 20000 -Protocol TCP -Action Allow"
    action :run
    not_if 'netsh advfirewall firewall show rule name=\"RuleName\" > nul'

结束

我猜这条规则有一个你不使用的名字,或者可以用来帮助你。像下面这样的方法应该可以奏效

添加规则时,请为其命名:

netsh advfirewall firewall add rule name=enableMSDTCFirewall ...
如果出现以下情况,请检查not_中的规则:

not_if 'netsh advfirewall firewall show rule name=enableMSDTCFirewall > nul'

如果规则已经存在,
show
命令应该返回0的
ERRORLEVEL

应该在“netsh…”行周围使用单引号,而不是大括号。