如何检查窗口的防火墙是否启用或不使用命令

我正在安装程序中使用netsh advfirewall防火墙命令添加一个Windows防火墙规则。 如果系统禁用了Windows防火墙,我的代码会给出错误消息。

所以我需要在执行命令netsh advfirewall防火墙添加之前检查窗口的防火墙状态。 即如果防火墙被禁用,则不需要添加规则。

我通过使用窗口registry值“ EnableFirewall ”检查是否启用防火墙。

HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ SharedAccess \参数\ FirewallPolicy \ StandardProfile

我不确定这是否正确。 还可以有域防火墙configuration文件(?)。

提前致谢。

另一个选择是使用netsh本身来检查防火墙是否启用。 执行命令netsh advfirewall show private|public|domain 。 它会打开/关闭状态。

Invoke-Command -ComputerName <servername> -Credential <username> -ScriptBlock {[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$env:COMPUTERNAME).OpenSubKey("System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile").GetValue("EnableFirewall")}

1意味着启用。

我是新来的,但我怎么用reg注册查询来获取细节。

在命令行输入这个,然后回车。

 reg query \\IP_Address\HEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile 

我在工作中使用它,也使用下面的命令。

 reg query \\ip_address\path 

我只需要为我接管的环境做类似的事情。 我用下面的检查所有三个配置文件的状态。

 invoke-command -computername $computer -scriptblock { try{ get-netfirewallprofile | select name,enabled } catch{ netsh advfirewall show all state } } 

try块可以和server 2012或者windows 8以及更新的系统一起工作。 如果失败的时候,它会抛出一个关于没有被捕获的cmdlet的错误,而不是给你一个错误,它会回落到使用netsh来显示信息。

我已经在服务器2008 R2,2012 R2和2016上使用了这个,效果很好。 希望对你有帮助!