Bagaimana saya bisa menggunakan netsh untuk menemukan aturan menggunakan suatu pola


10

Saya bertanya-tanya apakah ada orang di Microsoft yang pernah mengalami situasi di mana mereka tidak dapat mengingat nama aturan!
Satu- netsh advfirewall firewall show rulesatunya menerima 1 nama dan tidak ada fasilitas pencocokan pola tersedia di netsh untuk membantu menemukan aturan menggunakan pola suka "SQL*"atau ^SQL.+$
menggunakan acara dan name=alldimungkinkan untuk mendaftar semua aturan tapi saya tidak dapat menemukan alat grep baris perintah yang solid untuk windows.

Saya ingin dapat menjalankan perintah seperti ini:

netsh advfirewall firewall show rule name=sql*

Apakah ini mungkin?


1
jawaban cepatnya adalah netsh advfirewall firewall show rule name=all | find "SQL":; tetapi output dan kontrolnya tidak memuaskan seperti yang seharusnya. Ini agak berantakan dan bahkan lebih buruk, Case-Sensitive ...
Achilles

pikir tautan berikut ini dapat membantu blogs.technet.com/b/jamesone/archive/2009/02/18/…
tony roth

Menggunakan Powershell adalah pilihan lain; Iya. tetapi bagaimana jika Anda ingin melakukan ini pada mesin jarak jauh? Apakah mungkin untuk membiarkan port jarak jauh untuk PS terbuka dan memiliki IDS / IPS seperti yang saya miliki dengan BvSsshServer? Saya mencari sesuatu yang tersedia di command prompt asli Windows.
Achilles

Sepertinya mungkin untuk mengamankan PS menggunakan SSL: technet.microsoft.com/en-us/magazine/ff700227.aspx
Achilles

Saya telah menemukan bahwa menggunakan /Idengan FINDperintah, saya dapat menghindari masalah case-sensitive; tetapi hasilnya masih berantakan ...
Achilles

Jawaban:


10

Dalam menjalankan PowerShell:

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

lebih baik:

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

1
$ fw.rules | where-object {$ _. Diaktifkan -eq $ true -and $ _. Direction -eq 1} Membantu saya tiba di ini (inbound diaktifkan).
Awal

1
lebih lanjut, Anda dapat memilih hanya properti tertentu dari aturan tersebut. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts

1
Saya bingung, apakah ini dimaksudkan untuk dijalankan di prompt netsh? Atau lingkungan lain?
jjxtra

Ini harus dijalankan dalam prompt PowerShell atau sebagai bagian dari skrip PowerShell (.ps1). New-Objectadalah cmdlet PowerShell yang menyediakan akses ke COM API yang jauh lebih tua sambil mempertahankan sintaks PowerShell dan struktur objek.
BaseZen

4

Ini yang terbaik yang bisa saya lakukan. Adakah yang tahu bagaimana melakukannya lebih lanjut? Suka menghapus / mengurangi Nama Aturan dari hasil?

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

3

Pada Windows 10 saya mendapatkan peringatan ketika saya menjalankan netsh advfirewall, mengatakan bahwa versi Windows di masa depan mungkin tidak mendukung fitur itu lagi dan orang harus menggunakan PowerShell sebagai gantinya. Untungnya, apa yang ingin dilakukan OP mudah di PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

Saya memiliki 1000+ aturan firewall yang dibuat oleh executable yang diberi nama secara acak yang ingin saya hapus. Perintah berikut membuat ini mudah dilakukan:

Remove-NetFirewallRule -DisplayName "*mongod.exe"


2

Anda dapat mencoba Select-String :

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

1
Harap jangan unduh suara tanpa memeriksa bahwa Anda berada dalam kondisi yang diperlukan agar solusi ini berfungsi.
Loul G.

1

Tanpa PowerShell Anda cukup menggunakan regex dengan findstr:

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

0

Ini memang jawaban tail-tails tetapi komentar akan mengaburkan intinya.

Ini juga diakui menjawab pertanyaan yang sedikit berbeda: bagaimana saya tidak bisa menggunakan netshdan masih menemukan aturan? :-)

Saya pikir yang terbaik untuk tetap berada di idiom PowerShell jika Anda sudah ada di sana, dan Anda dapat menggunakan kemampuan pencocokan pola lengkap termasuk regex di dalamnya.

Demi itu, saya menyertakan beberapa kondisional dan mutasi untuk menunjukkan bagaimana semua konstruksi PowerShell dapat disematkan di blok gaya-fungsional.

Peringatan terakhir bahwa mutasi harus dijalankan dengan hak Administratif dimana jika dibaca tidak perlu.

(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 }
    }                                                              
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.