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 rule
satunya 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=all
dimungkinkan 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?
find
windows-firewall
netsh
Achilles
sumber
sumber
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 .../I
denganFIND
perintah, saya dapat menghindari masalah case-sensitive; tetapi hasilnya masih berantakan ...Jawaban:
Dalam menjalankan PowerShell:
lebih baik:
sumber
$fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
New-Object
adalah cmdlet PowerShell yang menyediakan akses ke COM API yang jauh lebih tua sambil mempertahankan sintaks PowerShell dan struktur objek.Ini yang terbaik yang bisa saya lakukan. Adakah yang tahu bagaimana melakukannya lebih lanjut? Suka menghapus / mengurangi Nama Aturan dari hasil?
sumber
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"
sumber
Anda dapat mencoba Select-String :
sumber
Tanpa PowerShell Anda cukup menggunakan regex dengan findstr:
sumber
Ini memang jawaban tail-tails tetapi komentar akan mengaburkan intinya.
Ini juga diakui menjawab pertanyaan yang sedikit berbeda: bagaimana saya tidak bisa menggunakan
netsh
dan 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.
sumber