Chef infra 具有自定义GUID的Windows防火墙的Chef Guard
我可以使用Chef和Powershell创建自定义Windows防火墙规则。我对not_if有问题 我在这里使用了注册表项方法: 自定义防火墙规则创建具有随机GUID的注册表项。我无法使用这些方法,因为我不知道密钥名称。每个节点上的键值相同,但键名不同 下面的工作。但是自定义密钥具有密钥名称的GUIDChef 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
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…”行周围使用单引号,而不是大括号。