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 rule
einzige 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=all
Es 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?
find
windows-firewall
netsh
Achilles
quelle
quelle
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/I
mit demFIND
Befehl dem Problem der Groß- und Kleinschreibung ausweichen kann. aber das Ergebnis ist immer noch chaotisch ...Antworten:
Führen Sie in PowerShell Folgendes aus:
noch besser:
quelle
$fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
New-Object
ist ein PowerShell-Cmdlet, das den Zugriff auf die viel ältere COM-API unter Beibehaltung der PowerShell-Syntax und der Objektstruktur ermöglicht.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?
quelle
Unter Windows 10 wird bei der Ausführung eine Warnung
netsh advfirewall
angezeigt, 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"
quelle
Sie können Select-String ausprobieren :
quelle
Ohne PowerShell können Sie Regex einfach mit findstr verwenden:
quelle
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
netsh
und 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.
quelle