Come posso usare netsh per trovare una regola usando un modello


10

Mi chiedo se qualcuno in Microsoft sia mai arrivato a una situazione in cui non riescono a ricordare il nome di una regola!
L' netsh advfirewall firewall show ruleunico accetta 1 nome e nessuna funzione di corrispondenza dei modelli è disponibile su netsh per aiutare a trovare una regola usando un modello simile "SQL*"o ^SQL.+$
usando show ed name=allè possibile elencare tutte le regole ma non sono stato in grado di trovare un solido strumento grep a riga di comando per Windows.

Voglio essere in grado di eseguire un comando come questo:

netsh advfirewall firewall show rule name=sql*

È possibile?


1
una risposta rapida sarebbe: netsh advfirewall firewall show rule name=all | find "SQL"; ma l'output e il controllo non sono così soddisfacenti come dovrebbero essere. È piuttosto disordinato e anche peggio, maiuscolo / minuscolo ...
Achille

pensa che il seguente link possa aiutare blogs.technet.com/b/jamesone/archive/2009/02/18/…
tony roth

L'uso di Powershell è un'altra opzione; sì. ma cosa succede se si desidera farlo su una macchina remota? È possibile lasciare aperte le porte remote per PS e avere IDS / IPS come quello che ho con BvSsshServer? Sto cercando qualcosa disponibile nel prompt dei comandi nativo di Windows.
Achille il

Sembra che sia possibile proteggere PS utilizzando SSL: technet.microsoft.com/en-us/magazine/ff700227.aspx
Achille

Ho trovato che l'uso /Icon FINDil comando, posso schivare il problema maiuscole e minuscole; ma il risultato è ancora disordinato ...
Achille l'

Risposte:


10

In esecuzione PowerShell:

$fw=New-object -comObject HNetCfg.FwPolicy2    
$fw.rules | findstr /i "whaturlookingfor"

meglio ancora:

$fw.rules | select name | select-string "sql"

1
$ fw.rules | where-object {$ _. Abilitato -eq $ true -e $ _. Direzione -eq 1} Mi ha aiutato ad arrivare a questo (inbound abilitato).
Bratch

1
inoltre, è possibile selezionare solo alcune proprietà della regola. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts,

1
Sono confuso, è pensato per essere eseguito in un prompt di netsh? O qualche altro ambiente?
jjxtra,

Questo deve essere eseguito in un prompt di PowerShell o come parte di uno script di PowerShell (.ps1). New-Objectè un cmdlet di PowerShell che fornisce l'accesso all'API COM molto più vecchia preservando la sintassi e la struttura degli oggetti di PowerShell.
BaseZen

4

Questo è il meglio che potrei fare. Qualcuno sa come andare oltre? Come rimuovere / sottrarre il nome della regola dai risultati?

netsh advfirewall firewall show rule name=all | find "Rule Name:" | find "NameLookingFor"

3

Su Windows 10 ricevo un avviso quando eseguo netsh advfirewall, dicendo che le future versioni di Windows potrebbero non supportare più quella funzionalità e si dovrebbe usare invece PowerShell. Fortunatamente, ciò che l'OP voleva fare è semplice in PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

Avevo più di 1000 regole firewall create da un eseguibile con nome casuale che volevo rimuovere. Il seguente comando ha reso questo facile da fare:

Remove-NetFirewallRule -DisplayName "*mongod.exe"


2

Puoi provare Select-String :

netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"

1
Si prega di non effettuare il downgrade senza verificare di essere nelle condizioni richieste affinché questa soluzione funzioni.
Loul G.

1

Senza PowerShell puoi semplicemente usare regex con findstr:

netsh advfirewall firewall show rule name=all | findstr /R "sql.*"

0

Questa è certamente una risposta alla coda, ma un commento oscurerebbe il punto.

Anche questo sta certamente rispondendo a una domanda leggermente diversa: come posso non usare netshe trovare ancora le regole? :-)

Penso che sia meglio rimanere nel linguaggio di PowerShell se ci sei già, e puoi usare la piena capacità di corrispondenza dei modelli, comprese le regex in essi.

Per il bene, ho incluso alcuni condizionali e mutazione per mostrare come tutti i costrutti di PowerShell siano incorporabili nei blocchi di stile funzionale.

Avvertenza finale che le mutazioni devono essere eseguite con diritti amministrativi laddove non è necessario leggere.

(New-Object -ComObject HNetCfg.FwPolicy2).rules |
    Where-Object { $_.Name -match '^SQL.+$' } |
    ForEach-Object { Write-Output "Checking $($_.Name)"
      if ( $_.Enabled ) { Write-Output "$($_.Name) already enabled" }
      else { Write-Output "$($_.Name) enabled"; $_.Enabled = $true }
    }                                                              
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.