Jak mogę użyć netsh, aby znaleźć regułę za pomocą wzorca

10

Zastanawiam się, czy ktoś w Microsoft kiedykolwiek doszedł do sytuacji, w której nie pamięta nazwy reguły! Akceptuje tylko 1 imię i brak możliwości dopasowywania wzór jest dostępny na netsh, aby pomóc znaleźć regułę stosując wzór podobny lub używając show i to jest możliwe wymienienie wszystkich zasad, ale nie udało mi się znaleźć solidne narzędzie grep wiersza polecenia dla systemu Windows.
netsh advfirewall firewall show rule"SQL*"^SQL.+$
name=all

Chcę móc uruchomić takie polecenie:

netsh advfirewall firewall show rule name=sql*

czy to możliwe?

Achilles
źródło
1
szybka odpowiedź byłaby: netsh advfirewall firewall show rule name=all | find "SQL"; ale wynik i kontrola nie są tak satysfakcjonujące, jak powinny. Jest raczej niechlujny, a nawet gorzej,
Achilles
myśl, że poniższy link może pomóc blogs.technet.com/b/jamesone/archive/2009/02/18/…
tony roth,
Korzystanie z PowerShell to kolejna opcja; tak. ale co jeśli chcesz to zrobić na zdalnym komputerze? Czy możliwe jest pozostawienie portów zdalnych otwartych dla PS i posiadanie IDS / IPS, tak jak w przypadku BvSsshServer? Szukam czegoś dostępnego w natywnym wierszu polecenia systemu Windows.
Achilles,
Wygląda na to, że można zabezpieczyć PS za pomocą protokołu SSL: technet.microsoft.com/en-us/magazine/ff700227.aspx
Achilles,
Znalazłem, że korzystanie /Iz FINDpolecenia, mogę uchylić problem wielkości liter; ale wynik jest nadal niechlujny ...
Achilles

Odpowiedzi:

10

W programie PowerShell:

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

jeszcze lepiej:

$fw.rules | select name | select-string "sql"
Tony Roth
źródło
1
$ fw.rules | gdzie-obiekt {$ _. Włączone -eq $ true -i $ _. Kierunek -eq 1} Pomógł mi do tego dojść (przychodzące włączone).
Bratch
1
ponadto możesz wybrać tylko niektóre właściwości reguły. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts,
1
Jestem zdezorientowany, czy to ma być uruchamiane w trybie netsh? A może jakieś inne środowisko?
jjxtra,
Należy to uruchomić w wierszu polecenia programu PowerShell lub jako część skryptu programu PowerShell (.ps1). New-Objectto polecenie cmdlet programu PowerShell, które zapewnia dostęp do znacznie starszego interfejsu API COM przy jednoczesnym zachowaniu składni i struktury obiektów programu PowerShell.
BaseZen
4

To najlepsze, co mogłem zrobić. Czy ktoś wie, jak to zrobić dalej? Jak usunąć / odjąć nazwę reguły od wyników?

netsh advfirewall firewall show rule name=all | find "Rule Name:" | find "NameLookingFor"
Ben
źródło
3

W systemie Windows 10 po uruchomieniu pojawia się ostrzeżenie netsh advfirewall, że przyszłe wersje systemu Windows mogą już nie obsługiwać tej funkcji i zamiast tego należy użyć programu PowerShell. Na szczęście to, co OP chciał zrobić, jest łatwe w PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

Miałem ponad 1000 reguł zapory, które zostały utworzone przez plik wykonywalny o losowej nazwie, który chciałem usunąć. Poniższe polecenie ułatwiło to:

Remove-NetFirewallRule -DisplayName "*mongod.exe"

bcody
źródło
2

Możesz spróbować Select-String :

netsh advfirewall firewall show rule name=all | select-string -pattern "Hyper-V"
Loul G.
źródło
1
Proszę nie głosować bez sprawdzenia, czy jesteś w wymaganych warunkach, aby to rozwiązanie działało.
Loul G.
1

Bez programu PowerShell możesz po prostu użyć wyrażenia regularnego z findstr:

netsh advfirewall firewall show rule name=all | findstr /R "sql.*"
SDK
źródło
0

Jest to wprawdzie odpowiedź na pytanie, ale komentarz zaciemniłby sens.

Jest to również odpowiedź na nieco inne pytanie: jak nie mogę używać netshi nadal znajdować reguł? :-)

Myślę, że najlepiej pozostać w idiomie PowerShell, jeśli już tam jesteś, i możesz użyć pełnej możliwości dopasowania wzorca, w tym wyrażeń regularnych.

W tym celu zawarłem kilka warunków i mutacji, aby pokazać, w jaki sposób wszystkie konstrukcje PowerShell można osadzić w blokach funkcjonalnych.

Ostateczne zastrzeżenie, że mutacje muszą być uruchamiane z uprawnieniami administracyjnymi, w przypadku gdy czytanie nie musi.

(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
źródło