Wie kann ich mit netsh eine Regel anhand eines Musters finden?

10

Ich frage mich, ob jemand in Microsoft jemals in eine Situation geraten ist, in der er sich nicht an den Namen einer Regel erinnern kann!
Der netsh advfirewall firewall show ruleeinzige akzeptiert 1 Namen und auf netsh ist keine Mustervergleichsfunktion verfügbar, um eine Regel mithilfe eines Musters wie "SQL*"oder ^SQL.+$
mithilfe von show zu finden. name=allEs ist möglich, alle Regeln aufzulisten, aber ich konnte kein solides Befehlszeilen-Grep-Tool für Windows finden.

Ich möchte einen Befehl wie diesen ausführen können:

netsh advfirewall firewall show rule name=sql*

Ist das möglich?

Achilles
quelle
1
eine schnelle Antwort wäre : netsh advfirewall firewall show rule name=all | find "SQL"; aber die Ausgabe und die Steuerung sind nicht so zufriedenstellend, wie es sein sollte. Es ist ziemlich chaotisch und noch schlimmer, Groß- und
Achilles
denke, der folgende Link könnte helfen blogs.technet.com/b/jamesone/archive/2009/02/18/…
Tony Roth
Die Verwendung von Powershell ist eine weitere Option. Ja. aber was ist, wenn Sie dies auf einem Remote-Computer tun möchten? Ist es möglich, die Remote-Ports für PS offen zu lassen und IDS / IPS wie bei BvSsshServer zu haben? Ich suche nach etwas, das in der nativen Windows-Eingabeaufforderung verfügbar ist.
Achilles
Es scheint möglich zu sein, PS mit SSL zu sichern: technet.microsoft.com/en-us/magazine/ff700227.aspx
Achilles
Ich habe festgestellt, dass ich /Imit dem FINDBefehl dem Problem der Groß- und Kleinschreibung ausweichen kann. aber das Ergebnis ist immer noch chaotisch ...
Achilles

Antworten:

10

Führen Sie in PowerShell Folgendes aus:

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

noch besser:

$fw.rules | select name | select-string "sql"
Tony Roth
quelle
1
$ fw.rules | where-object {$ _. Enabled -eq $ true -and $ _. Direction -eq 1} Hat mir dabei geholfen, dies zu erreichen (Inbound aktiviert).
Bratch
1
Außerdem können Sie nur bestimmte Eigenschaften der Regel auswählen. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts
1
Ich bin verwirrt, soll dies in einer Netsh-Eingabeaufforderung ausgeführt werden? Oder eine andere Umgebung?
jjxtra
Dies muss in einer PowerShell-Eingabeaufforderung oder als Teil eines PowerShell-Skripts (.ps1) ausgeführt werden. New-Objectist ein PowerShell-Cmdlet, das den Zugriff auf die viel ältere COM-API unter Beibehaltung der PowerShell-Syntax und der Objektstruktur ermöglicht.
BaseZen
4

Das ist das Beste, was ich tun kann. Weiß jemand, wie man es weiter bringt? Möchten Sie den Regelnamen von den Ergebnissen entfernen / subtrahieren?

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

Unter Windows 10 wird bei der Ausführung eine Warnung netsh advfirewallangezeigt, dass zukünftige Windows-Versionen diese Funktion möglicherweise nicht mehr unterstützen und stattdessen PowerShell verwendet werden sollte. Glücklicherweise ist das, was das OP tun wollte, in PowerShell einfach:

Get-NetFirewallRule -DisplayName "SQL*"

Ich hatte mehr als 1000 Firewall-Regeln, die von einer zufällig benannten ausführbaren Datei erstellt wurden, die ich entfernen wollte. Der folgende Befehl machte dies einfach:

Remove-NetFirewallRule -DisplayName "*mongod.exe"

bcody
quelle
2

Sie können Select-String ausprobieren :

netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"
Loul G.
quelle
1
Bitte stimmen Sie nicht ab, ohne zu überprüfen, ob Sie die erforderlichen Bedingungen erfüllen, damit diese Lösung funktioniert.
Loul G.
1

Ohne PowerShell können Sie Regex einfach mit findstr verwenden:

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

Dies ist zwar eine Antwort auf den Mantelschwanz, aber ein Kommentar würde den Punkt verdecken.

Dies beantwortet zugegebenermaßen auch eine etwas andere Frage: Wie kann ich Regeln nicht verwenden netshund trotzdem finden? :-)

Ich denke, es ist am besten, in der PowerShell-Sprache zu bleiben, wenn Sie bereits dort sind, und Sie können die volle Musteranpassungsfunktion einschließlich der darin enthaltenen regulären Ausdrücke verwenden.

Aus diesem Grund habe ich einige Bedingungen und Mutationen eingefügt, um zu zeigen, wie alle PowerShell-Konstrukte in die funktionalen Blöcke eingebettet werden können.

Letzte Einschränkung, dass Mutationen mit Administratorrechten ausgeführt werden müssen, wo dies beim Lesen nicht erforderlich ist.

(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
quelle