Comment puis-je utiliser netsh pour trouver une règle à l'aide d'un modèle

10

Je me demande si quelqu'un dans Microsoft n'est jamais arrivé à une situation où il ne se souvient plus du nom d'une règle!
Le netsh advfirewall firewall show ruleseul accepte 1 nom et aucune fonction de correspondance de modèle n'est disponible sur netsh pour aider à trouver une règle en utilisant un modèle comme "SQL*"ou en ^SQL.+$
utilisant show et name=allil est possible de répertorier toutes les règles, mais je n'ai pas pu trouver un outil de grep de ligne de commande solide pour Windows.

Je veux pouvoir exécuter une commande comme celle-ci:

netsh advfirewall firewall show rule name=sql*

Est-ce possible?

Achille
la source
1
serait une réponse rapide: netsh advfirewall firewall show rule name=all | find "SQL"; mais la sortie et le contrôle ne sont pas aussi satisfaisants qu'ils devraient l'être. C'est plutôt désordonné et pire encore, sensible à la casse ...
Achilles
pense que le lien suivant peut aider blogs.technet.com/b/jamesone/archive/2009/02/18/…
tony roth
L'utilisation de Powershell est une autre option; Oui. mais que faire si vous voulez le faire sur une machine distante? Est-il possible de laisser les ports distants pour PS ouverts et d'avoir des IDS / IPS comme ceux que j'ai avec BvSsshServer? Je cherche quelque chose de disponible dans l'invite de commande native de Windows.
Achille
Il semble qu'il soit possible de sécuriser PS à l'aide de SSL: technet.microsoft.com/en-us/magazine/ff700227.aspx
Achilles
Je l' ai trouvé que l' utilisation /Ide la FINDcommande, je peux esquiver le problème sensible à la casse; mais le résultat est toujours en désordre ...
Achilles

Réponses:

10

Dans l'exécution de PowerShell:

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

mieux encore:

$fw.rules | select name | select-string "sql"
Tony Roth
la source
1
$ fw.rules | where-object {$ _. Enabled -eq $ true -and $ _. Direction -eq 1} M'a aidé à y arriver (entrée activée).
Bratch
1
en outre, vous ne pouvez sélectionner que certaines propriétés de la règle. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts
1
Je suis confus, est-ce destiné à être exécuté dans une invite netsh? Ou un autre environnement?
jjxtra
Cela doit être exécuté dans une invite PowerShell ou dans le cadre d'un script PowerShell (.ps1). New-Objectest une applet de commande PowerShell qui permet d'accéder à l'API COM beaucoup plus ancienne tout en préservant la syntaxe et la structure d'objet PowerShell.
BaseZen
4

C'est le mieux que je puisse faire. Quelqu'un sait-il aller plus loin? Vous souhaitez supprimer / soustraire le nom de la règle des résultats?

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

Sur Windows 10, je reçois un avertissement lorsque j'exécute netsh advfirewall, disant que les futures versions de Windows pourraient ne plus prendre en charge cette fonctionnalité et que l'on devrait utiliser PowerShell à la place. Heureusement, ce que l'OP voulait faire est facile dans PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

J'avais plus de 1000 règles de pare-feu créées par un exécutable nommé au hasard que je voulais supprimer. La commande suivante a rendu cela facile à faire:

Remove-NetFirewallRule -DisplayName "*mongod.exe"

bcody
la source
2

Vous pouvez essayer Select-String :

netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"
Loul G.
la source
1
S'il vous plaît, ne votez pas sans vérifier que vous êtes dans les conditions requises pour que cette solution fonctionne.
Loul G.
1

Sans PowerShell, vous pouvez simplement utiliser regex avec findstr:

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

Il s'agit certes d'une réponse à la mode mais un commentaire obscurcirait le point.

Certes, cela répond également à une question légèrement différente: comment puis-je ne pas utiliser netshet toujours trouver des règles? :-)

Je pense qu'il est préférable de rester dans l'idiome PowerShell si vous y êtes déjà, et vous pouvez utiliser la capacité de correspondance de modèles complète, y compris les expressions rationnelles.

Pour le plaisir, j'ai inclus quelques conditions et mutations pour montrer comment toutes les constructions PowerShell peuvent être intégrées dans les blocs de style fonctionnel.

Dernière mise en garde: les mutations doivent être exécutées avec des droits d'administration là où les lectures ne sont pas nécessaires.

(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
la source