2012-07-05 13 views
9

Dodaję regułę zapory systemu Windows przy użyciu polecenia netsh advfirewall firewall w programie instalacyjnym. Mój kod wyświetla komunikat o błędzie, jeśli system ma wyłączoną zaporę systemu Windows.Sposób sprawdzania zapory w oknie jest włączony lub nie są używane komendy

Muszę więc sprawdzić stan zapory w oknie przed wykonaniem polecenia firewall netsh advfirewall add. tj. jeśli zapora jest wyłączona, nie ma potrzeby dodawania reguły.

Sprawdzam, czy zapora jest włączona, czy nie, używając wartości rejestru okna "EnableFirewall".

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ SharedAccess \ Parameters \ FirewallPolicy \ StandardProfile

nie jestem pewien, że to właściwa droga. Może istnieć również profil zapory domeny (?).

Z góry dziękuję.

+0

myślę, że mogę go znaleźć od wartość rejestru HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ SharedAccess \ Parameters. – JChan

+1

Pamiętaj, że zapora systemu Windows może nie być jedyną aktywną. –

Odpowiedz

8

Inną opcją jest użycie samego netsh, aby sprawdzić, czy zapora jest włączona, czy nie. Wykonaj polecenie netsh advfirewall show private|public|domain. Da to stan on/off.

+7

Nie działa w Win7 pro. To, co działało, to 'netsh advfirewall show currentprofile'. – Macke

+0

Poleceniem jest ** 'netsh advfirewall show all state' **.Możesz zastąpić ** 'all' ** przez **' private' ** lub ** 'public' ** lub **' domain' ** – Paul

0

Jestem nowy w tym, ale jakkolwiek użyłem reg zapytanie, aby uzyskać szczegóły.

wpisz to w linii poleceń i naciśnij enter.

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

Używałem go w moich pracach, a także używałem polecenia poniżej.

reg query \\ip_address\path 
+0

Brak litery "K" w kluczu HKEY ze ścieżki rejestru. SO nie pozwala mi edytować, ponieważ jest mniej niż 6 znaków zmiany ... – 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 środki włączone.

+1

Należy zapytać CurrentControlSet, a nie żadnego ControlSet. –

0

Po prostu musiałem zrobić coś podobnego w otoczeniu, które przejąłem. Użyłem poniżej, by sprawdzić stan dla wszystkich trzech profili.

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

blok try będzie działał z serwerem 2012 lub systemem Windows 8 i nowszymi. jeśli to się nie powiedzie, gdy zgłasza błąd związany z brakiem cmdletu, który zostanie przechwycony i zamiast podać błąd, wróci do użycia narzędzia netsh do wyświetlenia informacji.

Użyłem tego na serwerze 2008 R2, 2012 R2 i 2016 z dobrymi wynikami. Mam nadzieję, że to działa dla Ciebie!

-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

Dziękujemy za ten fragment kodu, który może zapewnić ograniczoną, natychmiastową pomoc. [Poprawne wyjaśnienie znacznie poprawiłoby jego długoterminową wartość] (// meta.stackexchange.com/q/114762/206345), pokazując _why_ to jest dobre rozwiązanie problemu i sprawiłoby, że byłby bardziej przydatny dla przyszłych czytelników z inne, podobne pytania. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienia, w tym założenia, które podjąłeś. – gunr2171