VBScript - 检查防火墙是否已启用

时间:2012-05-12 22:01:05

标签: windows vbscript firewall

如果启用了防火墙,我写了一个脚本来检查Windows。它看起来很好,但它总是说防火墙已启用 - 即使它被禁用。我花了很多时间分析它没有结果 - 你能不能帮我弄清楚它有什么问题?

Dim strFirewallStatus, strComputer
strComputer = "localhost"

Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_ 
                       strComputer & "\root\default:StdRegProv")

If err.number = 0 Then
  objReg.GetDWORDValue &H80000002, "SYSTEM\CurrentControlSet\" &_
  "Services\SharedAccess\Parameters\FirewallPolicy\" &_
  "DomainProfile\", "EnableFirewall", dwValue

  If dwValue <> 0 Then
    strFirewallStatus = "Firewall is enabled"
  Else
    strFirewallStatus = "Firewall is disabled"
  End If

  WScript.Echo strFirewallStatus
Else
  WScript.Echo strComputer & " - Error" & err.number & " : " &_
  err.description
  err.clear
End if

我将该脚本保存为.vbs文件。

顺便说一句 - 如何在系统启动时设置脚本?我希望这个脚本在首次启动后自动向注册表添加信息。

1 个答案:

答案 0 :(得分:2)

您应该考虑为Domain ProfileStandard Profile (Private or domestic lan)Public Profile (public lan)启用/禁用防火墙。
每个设置在注册表中都有一个单独的键。

如果您的电脑不属于某个网域,则该测试会返回默认值已启用

在我的家用电脑(win7 64bit无域名)上,如果我使用'StandardProfile'而不是'StandardProfile',那么脚本会正确返回当前的状态防火墙。

If err.number = 0 Then 
  objReg.GetDWORDValue &H80000002, "SYSTEM\CurrentControlSet\" &_ 
  "Services\SharedAccess\Parameters\FirewallPolicy\" &_ 
  "StandardProfile\", "EnableFirewall", dwValue