2012-07-05 12 views
9

Aggiungo una regola del firewall di Windows usando il comando netsh advfirewall firewall in un programma di installazione. Il mio codice sta dando un messaggio di errore se il sistema ha il firewall di Windows disabilitato.Come controllare il firewall della finestra è abilitato o meno usando i comandi

Quindi ho bisogno di controllare lo stato del firewall della finestra prima di eseguire il comando netsh advfirewall firewall aggiungere. cioè, se il firewall è disabilitato, non è necessario aggiungere la regola.

Sto verificando se il firewall è abilitato o meno utilizzando il valore del registro di finestra "EnableFirewall".

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

io non sono sicuro che questa è la strada giusta. Può esserci anche il profilo del firewall di dominio (?).

Grazie in anticipo.

+0

Credo di poter trovare dal valore di registro HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ SharedAccess \ Parameters. – JChan

+1

Ricordare che il firewall di Windows potrebbe non essere l'unico attivo. –

risposta

8

Un'altra opzione è utilizzare netsh per verificare se il firewall è abilitato o meno. Esegui il comando netsh advfirewall show private|public|domain. Darà lo stato on/off.

+7

Non funziona in Win7 pro. Ciò che ha funzionato è stato 'netsh advfirewall show currentprofile'. – Macke

+0

Il comando è ** 'netsh advfirewall mostra tutto lo stato' **.Puoi sostituire ** 'all' ** per **' private' ** o ** 'public' ** o **' domain' ** – Paul

0

Sono nuovo, ma come mai ho usato la query reg per ottenere i dettagli.

digita questo nella riga di comando e premi invio.

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

Lo stavo usando nei miei lavori e stavo usando anche il comando seguente.

reg query \\ip_address\path 
+0

La lettera 'K' è mancante in HKEY dal percorso del registro. SO non mi consente di modificare poiché è inferiore a una modifica di 6 caratteri ... – 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 mezzi abilitati.

+1

È necessario eseguire una query su CurrentControlSet, non su ControlSet. –

0

Ho appena dovuto fare qualcosa di simile per un ambiente che ho assunto. Ho usato il sotto per controllare lo stato di tutti e tre i profili.

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

il blocco try funziona con server 2012 o Windows 8 e sistemi più recenti. se fallisce quando genera un errore sul fatto di non avere il cmdlet che verrà catturato e invece di darti un errore ricadrà sull'uso di netsh per visualizzare le informazioni.

L'ho usato su server 2008 R2, 2012 R2 e 2016 con buoni risultati. Spero che funzioni per te!

-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

Grazie per questo snippet di codice, che potrebbe fornire un aiuto limitato e immediato. Una [spiegazione corretta migliorerebbe notevolmente il suo valore a lungo termine] (// meta.stackexchange.com/q/114762/206345) mostrando _why_ questa è una buona soluzione al problema e lo renderebbe più utile ai futuri lettori con altre domande simili. Per favore [modifica] la tua risposta per aggiungere qualche spiegazione, incluse le ipotesi che hai fatto. – gunr2171

Problemi correlati