2012-07-05 6 views
9

Ich füge eine Windows-Firewall-Regel mit Netsh Advfirewall Firewall Befehl in einem Setup-Programm. Mein Code gibt eine Fehlermeldung aus, wenn die Windows-Firewall deaktiviert ist.So überprüfen Sie die Firewall des Fensters ist aktiviert oder nicht mit Befehlen

Also ich muss den Firewall-Status des Fensters überprüfen, bevor Sie den Befehl Netsh Advfirewall Firewall hinzufügen. Wenn die Firewall deaktiviert ist, muss die Regel nicht hinzugefügt werden.

Ich überprüfe, ob die Firewall aktiviert ist oder nicht, indem Sie den Fensterregistrierungswert "EnableFirewall" verwenden.

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Sharedaccess \ Parameters \ Firewallpolicy \ Standardprofile

Ich bin nicht sicher, ob dies der richtige Weg ist. Es kann auch ein Domänen-Firewall-Profil (?) Geben.

Vielen Dank im Voraus.

+0

Ich glaube, ich es von den finden Registrierungswert HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ SharedAccess \ Parameters. – JChan

+1

Denken Sie daran, dass die Windows-Firewall möglicherweise nicht die einzige aktive Firewall ist. –

Antwort

8

Eine weitere Option ist die Verwendung von netsh selbst, um zu prüfen, ob die Firewall aktiviert ist oder nicht. Führen Sie den Befehl netsh advfirewall show private|public|domain aus. Es gibt den Status an/aus.

+7

Funktioniert nicht in Win7 Pro. Was funktioniert hat, war "netsh advfirewall show currentprofile". – Macke

+0

Der Befehl lautet ** 'netsh advfirewall show all state' **.Sie können ** 'all' ** durch **' private' ** oder ** 'public' ** oder **' domain' ersetzen ** – Paul

0

Ich bin neu, aber wie auch immer ich Reg-Abfrage verwendet habe, um die Details zu erhalten.

Geben Sie diese in die Befehlszeile ein und drücken Sie die Eingabetaste.

Ich benutzte es in meinen Arbeiten und verwendete auch den folgenden Befehl.

reg query \\ip_address\path 
+0

Der Buchstabe 'K' fehlt in HKEY im Registrierungspfad. SO lässt mich nicht bearbeiten, da es weniger als eine 6-stellige Änderung ist ... – voidmain

2

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 Mittel aktiviert.

+1

Sie sollten das CurrentControlSet abfragen, kein ControlSet. –

0

Ich musste etwas ähnliches für eine Umgebung tun, die ich übernommen habe. Ich habe den Status unten für alle drei Profile verwendet.

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

der Versuch Block wird mit Server 2012 oder Windows 8 und neueren Systemen arbeiten. Wenn dies fehlschlägt, wenn ein Fehler ausgegeben wird, dass das Cmdlet nicht abgefangen wird, und anstatt einen Fehler zu erhalten, greift es auf netsh zurück, um die Informationen anzuzeigen.

Ich habe dies auf Server 2008 R2, 2012 R2 und 2016 mit guten Ergebnissen verwendet. Hoffe es funktioniert für dich!

-2
$Compliance = 'Non-Compliant' 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Domain' -and $_.Enabled -eq 'True'} 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Public' -and $_.Enabled -eq 'True'} 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Private' -and $_.Enabled -eq 'True'} 
if ($Check) {$Compliance = 'Compliant'} 
$Compliance 
+0

Vielen Dank für dieses Code-Snippet, das eine begrenzte, sofortige Hilfe bieten kann. Eine [korrekte Erklärung würde ihren langfristigen Wert erheblich verbessern] (// meta.stackexchange.com/q/114762/206345), indem _why_ gezeigt wird, das ist eine gute Lösung für das Problem und würde es für zukünftige Leser mit mehr nützlich machen andere, ähnliche Fragen. Bitte [bearbeiten] Sie Ihre Antwort, um einige Erklärungen hinzuzufügen, einschließlich der Annahmen, die Sie getroffen haben. – gunr2171

Verwandte Themen