Question Comment puis-je utiliser netsh pour trouver une règle en utilisant un motif


Je me demande si quelqu'un chez Microsoft est déjà arrivé à une situation dans laquelle il ne se souvient pas du nom d'une règle!
le netsh advfirewall firewall show rule accepte seulement 1 Le nom et aucune fonction de correspondance de modèle ne sont disponibles sur netsh pour vous aider à trouver une règle utilisant un modèle tel que "SQL*" ou ^SQL.+$
en utilisant show et name=all il est possible de répertorier toutes les règles, mais je n’ai pas pu trouver un outil grep en 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?


7
2017-08-08 16:39


origine


une réponse rapide serait: 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 même pire, Case-Sensitive ... - Achilles
pense que le lien suivant peut aider blogs.technet.com/b/jamesone/archive/2009/02/18/… - tony roth
Utiliser Powershell est une autre option. Oui. mais que faire si vous voulez faire cela sur une machine distante? Est-il possible de laisser les ports distants pour PS ouverts et d'avoir un IDS / IPS similaire à celui que j'ai avec BvSsshServer? Je recherche quelque chose de disponible dans l'invite de commande native de Windows. - Achilles
Il semble possible de sécuriser PS à l'aide de SSL: technet.microsoft.com/en-us/magazine/ff700227.aspx - Achilles
J'ai trouvé qu'en utilisant /I avec FIND commande, je peux esquiver le problème sensible à la casse; mais le résultat est encore salissant ... - Achilles


Réponses:


Dans PowerShell, exécutez:

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

mieux encore:

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

9
2017-08-08 17:05



$ fw.rules | où-objet {$ _. Enabled -eq $ true -et $ _. Direction -eq 1} m'a aidé à y arriver (entrée activée). - Bratch
De plus, 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
Je suis confus, cela est-il censé ê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-Object est une cmdlet PowerShell qui fournit un accès à la plus ancienne API COM tout en préservant la syntaxe et la structure d'objet de PowerShell. - BaseZen


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

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

3
2018-06-03 22:22





Tu peux essayer Chaîne de sélection:

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

2
2018-05-24 19:38



Ne fonctionne pas du tout pour moi - jjxtra
Merci de ne pas sous-estimer sans vérifier que vous êtes dans les conditions requises pour que cette solution fonctionne. - Loul G.


Sous Windows 10, un avertissement s'affiche lorsque j'exécute netsh advfirewall, indiquant que les futures versions de Windows pourraient ne plus prendre en charge cette fonctionnalité et que vous devriez plutôt utiliser PowerShell. Heureusement, ce que l'OP voulait faire est simple dans PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

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

Remove-NetFirewallRule -DisplayName "*mongod.exe"


2
2018-06-27 06:08





Sans PowerShell, vous pouvez simplement utiliser regex avec findstr:

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

1
2018-01-10 15:10





Ceci est certes une réponse imparable, mais un commentaire obscurcirait le point.

C’est aussi certes répondre à une question légèrement différente: comment puis-je ne pas utilisation netsh et 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 le capacité totale de correspondance de motif y compris les regex dans celle-ci.

Pour le plaisir, j'ai inclus quelques conditions et mutations pour montrer comment toutes les constructions PowerShell sont incorporables dans les blocs de style fonctionnel.

Dernier avertissement que les mutations doivent être exécutées avec des droits d’administrateur 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 }
    }                                                              

0
2018-04-11 23:19