2012-05-12 87 views
1

如果啓用防火牆,我寫了一個腳本來檢查Windows。它看起來很好,但它總是說防火牆已啓用 - 即使它被禁用。我花了很多時間分析它,但沒有結果 - 你能幫我弄清楚它有什麼問題嗎?VBScript - 檢查是否啓用防火牆

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

下面是可能適合您的一種替代方案:http://technet.microsoft.com/en-us/library/ee692641.aspx – paulsm4

+0

是Windows防火牆正在使用您的域配置文件?你是否檢查過(使用regedit)當你關閉防火牆時,有問題的註冊表值實際上發生了變化? –

回答

2

您應該考慮防火牆可以啓用/禁用Domain ProfileStandard Profile (Private or domestic lan)Public Profile (public lan)
每個設置在註冊表中都有一個單獨的密鑰。

如果您的電腦不是域的一部分,則測試返回默認值啓用

在我的家用電腦(WIN7 64位無域)如果,而不是「DomainProfile」,我用「StandardProfile」那麼腳本返回正確的防火牆的當前狀態。

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