Como posso usar o netsh para encontrar uma regra usando um padrão

7

Gostaria de saber se alguém na Microsoft já chegou a uma situação em que não consegue lembrar o nome de uma regra!
O netsh advfirewall firewall show rule aceita apenas o nome 1 e nenhum recurso de correspondência de padrão está disponível no netsh para ajudar a encontrar uma regra usando um padrão como "SQL*" ou ^SQL.+$
Usando show e name=all é possível listar todas as regras, mas não consegui encontrar uma ferramenta grep de linha de comando para windows.

Eu quero poder executar um comando assim:

netsh advfirewall firewall show rule name=sql*

Isso é possível?

    
por Achilles 08.08.2012 / 18:39

6 respostas

9

No PowerShell, execute:

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

melhor ainda:

$fw.rules | select name | select-string "sql"
    
por 08.08.2012 / 19:05
3

Isso é o melhor que eu poderia fazer. Alguém sabe como ir mais longe? Como remover / subtrair o nome da regra dos resultados?

netsh advfirewall firewall show rule name=all | find "Rule Name:" | find "NameLookingFor"
    
por 04.06.2014 / 00:22
2

Você pode tentar Selecionar sequência :

netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"
    
por 24.05.2013 / 21:38
2

No Windows 10, recebo um aviso quando executo netsh advfirewall , dizendo que futuras versões do Windows talvez não suportem mais esse recurso e que se deve usar o PowerShell. Felizmente, o que o OP queria fazer é fácil no PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

Eu tinha mais de 1000 regras de firewall criadas por um executável de nome aleatório que eu queria remover. O seguinte comando tornou isso fácil de fazer:

Remove-NetFirewallRule -DisplayName "*mongod.exe"

    
por 27.06.2017 / 08:08
1

Sem o PowerShell, você pode simplesmente usar o regex com o findstr:

netsh advfirewall firewall show rule name=all | findstr /R "sql.*"
    
por 10.01.2017 / 16:10
0

Esta é, reconhecidamente, uma resposta de casaco, mas um comentário obscureceria o ponto.

Isso também está respondendo a uma pergunta um pouco diferente: como eu não posso usar netsh e ainda encontrar regras? : -)

Eu acho que é melhor permanecer no idioma do PowerShell se você já estiver lá, e você pode usar o capacidade de correspondência de padrões completa incluindo regexes aqui.

Para o efeito, incluí algumas condicionais e mutações para mostrar como todas as construções do PowerShell são incorporáveis nos blocos de estilo funcional.

Advertência final de que as mutações devem ser executadas com direitos administrativos, onde as leituras não precisam.

(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 }
    }                                                              
    
por 12.04.2018 / 01:19