2

我编写了一个脚本来检查 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 文件。

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

4

1 回答 1

2

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

如果您的 PC 不是域的一部分,则测试将返回默认值Enabled

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

If err.number = 0 Then 
  objReg.GetDWORDValue &H80000002, "SYSTEM\CurrentControlSet\" &_ 
  "Services\SharedAccess\Parameters\FirewallPolicy\" &_ 
  "StandardProfile\", "EnableFirewall", dwValue 
于 2012-05-12T23:59:42.413 回答