¿Cómo puedo usar netsh para encontrar una regla usando un patrón?

10

¡Me pregunto si alguien en Microsoft ha llegado a una situación en la que no puede recordar el nombre de una regla!
El netsh advfirewall firewall show ruleúnico acepta 1 nombre y no hay una función de coincidencia de patrones disponible en netsh para ayudar a encontrar una regla usando un patrón como "SQL*"o ^SQL.+$
usando show y name=alles posible enumerar todas las reglas, pero no pude encontrar una herramienta grep de línea de comandos sólida para Windows.

Quiero poder ejecutar un comando como este:

netsh advfirewall firewall show rule name=sql*

es posible?

Aquiles
fuente
1
una respuesta rápida sería: netsh advfirewall firewall show rule name=all | find "SQL"; pero la salida y el control no son tan satisfactorios como deberían ser. Es bastante desordenado e incluso peor, distingue entre mayúsculas y minúsculas ...
Aquiles
creo que el siguiente enlace puede ayudar a blogs.technet.com/b/jamesone/archive/2009/02/18/…
tony roth
Usar Powershell es otra opción; si. pero ¿y si quieres hacer esto en una máquina remota? ¿Es posible dejar abiertos los puertos remotos para PS y tener IDS / IPS como lo que tengo con BvSsshServer? Estoy buscando algo disponible en el símbolo del sistema nativo de Windows.
Aquiles el
Parece que es posible asegurar PS usando SSL: technet.microsoft.com/en-us/magazine/ff700227.aspx
Achilles
He encontrado que el uso /Ide FINDcomandos, puedo esquivar el problema entre mayúsculas y minúsculas; pero el resultado sigue siendo desordenado ...
Aquiles

Respuestas:

10

En PowerShell, ejecute:

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

mejor todavía:

$fw.rules | select name | select-string "sql"
Tony Roth
fuente
1
$ fw.rules | where-object {$ _. Enabled -eq $ true -and $ _. Direction -eq 1} Me ayudó a llegar a esto (entrada habilitada).
Bratch
1
Además, puede seleccionar solo ciertas propiedades de la regla. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts
1
Estoy confundido, ¿está destinado a ejecutarse en un indicador de netsh? ¿O algún otro ambiente?
jjxtra
Esto debe ejecutarse en un indicador de PowerShell o como parte de un script de PowerShell (.ps1). New-Objectes un cmdlet de PowerShell que proporciona acceso a la API COM mucho más antigua al tiempo que conserva la sintaxis y la estructura de objetos de PowerShell.
BaseZen
4

Esto es lo mejor que puedo hacer. ¿Alguien sabe cómo llevarlo más lejos? ¿Como eliminar / restar el nombre de la regla de los resultados?

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

En Windows 10 recibo una advertencia cuando ejecuto netsh advfirewall, diciendo que las futuras versiones de Windows ya no admitirán esa característica y uno debería usar PowerShell en su lugar. Afortunadamente, lo que el OP quería hacer es fácil en PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

Tenía más de 1000 reglas de firewall creadas por un ejecutable con nombre aleatorio que quería eliminar. El siguiente comando facilitó esta tarea:

Remove-NetFirewallRule -DisplayName "*mongod.exe"

bcody
fuente
2

Puedes probar Select-String :

netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"
Loul G.
fuente
1
No haga un voto negativo sin verificar que se encuentra en las condiciones requeridas para que esta solución funcione.
Loul G.
1

Sin PowerShell, simplemente puede usar expresiones regulares con FindStr:

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

Esta es una respuesta que no se puede evitar, pero un comentario oscurecería el punto.

Esto también responde a una pregunta ligeramente diferente: ¿cómo no puedo usar netshy aún encontrar reglas? :-)

Creo que es mejor permanecer en el idioma de PowerShell si ya está allí, y puede usar la capacidad completa de coincidencia de patrones, incluidas las expresiones regulares.

Por el bien, incluí algunos condicionales y mutaciones para mostrar cómo todas las construcciones de PowerShell se pueden incorporar en los bloques de estilo funcional.

Advertencia final de que las mutaciones deben ejecutarse con derechos administrativos donde, como se lee, no es necesario.

(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 }
    }                                                              
BaseZen
fuente