Bir desen kullanarak bir kural bulmak için netsh'i nasıl kullanabilirim


10

Microsoft'ta hiç kimsenin bir kuralın adını hatırlayamadıkları bir duruma gelip gelmediğini merak ediyorum! Sadece kabul 1 adı ve hiçbir desen eşleştirme tesis gibi bir desen kullanarak kural bulmak yardımına netsh'in mevcuttur veya gösteriyi kullanan ve bunun tüm kuralları sıralamak mümkündür ama pencereler için sağlam bir komut satırı grep aracını bulamadı.
netsh advfirewall firewall show rule"SQL*"^SQL.+$
name=all

Ben böyle bir komut çalıştırmak mümkün olmak istiyorum:

netsh advfirewall firewall show rule name=sql*

Mümkün mü?


1
hızlı bir cevap netsh advfirewall firewall show rule name=all | find "SQL":; ancak çıktı ve kontrol olması gerektiği kadar tatmin edici değildir. Oldukça dağınık ve daha da kötüsü, Büyük / Küçük Harfe Duyarlı ...
Achilles


Powershell kullanmak başka bir seçenektir; Evet. Peki ya bunu uzaktaki bir makinede yapmak istiyorsanız? PS için uzak bağlantı noktalarını açık bırakmak ve BvSsshServer ile sahip olduğum gibi IDS / IPS'ye sahip olmak mümkün mü? Windows'un yerel komut isteminde kullanılabilir bir şey arıyorum.
Aşil


Ben komut /Iile kullanarak FIND, büyük / küçük harfe duyarlı sorunu atlatmak bulundu ; ama sonuç hala dağınık ...
Aşil

Yanıtlar:


10

PowerShell çalıştırmasında:

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

daha iyisi:

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

1
$ fw.rules | where-object {$ _. Etkin -eq $ true -ve $ _. Yön -eq 1} Buna ulaşmama yardımcı oldu (gelen özellik etkin).
Ocak'ta Bratch

1
ayrıca, kuralın yalnızca belirli özelliklerini seçebilirsiniz. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts

1
Kafam karıştı, bu bir netsh isteminde çalıştırılacak mı? Yoksa başka bir ortam mı?
jjxtra

Bu bir PowerShell isteminde veya bir PowerShell (.ps1) komut dosyasının parçası olarak çalıştırılmalıdır. New-ObjectPowerShell sözdizimini ve nesne yapısını korurken çok daha eski COM API'sine erişim sağlayan bir PowerShell cmdletidir.
BaseZen

4

Yapabileceğim en iyisi bu. Nasıl daha ileri gideceğini bilen var mı? Kural Adını sonuçlardan kaldırmak / çıkarmak gibi mi?

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

3

Windows 10'da yürüttüğümde netsh advfirewall, gelecekteki Windows sürümlerinin bu özelliği artık desteklemeyebileceğini ve bunun yerine PowerShell kullanması gerektiğini söyleyen bir uyarı alıyorum. Neyse ki, OP'nin PowerShell'de yapmak istediği şey kolaydır:

Get-NetFirewallRule -DisplayName "SQL*"

Kaldırmak istediğim, rasgele adlandırılmış bir yürütülebilir dosya tarafından oluşturulan 1000+ güvenlik duvarı kuralım vardı. Aşağıdaki komut bunu kolaylaştırdı:

Remove-NetFirewallRule -DisplayName "*mongod.exe"


2

Select-String'i deneyebilirsiniz :

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

1
Bu çözümün çalışması için gerekli koşullarda olup olmadığınızı kontrol etmeden lütfen aşağı inmeyin.
Loul G.

1

PowerShell olmadan findstr ile regex'i kullanabilirsiniz:

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

0

Kuşkusuz bu bir manto cevabıdır ama bir yorum bu noktayı gizleyecektir.

Bu aynı zamanda kuşkusuz biraz daha farklı bir soruya cevap olduğunu: nasıl olabilir değil kullanmak netshve hala kuralları bulabilirsiniz? :-)

Zaten oradaysanız PowerShell deyiminde kalmak en iyisi ve burada regexes de dahil olmak üzere tam desen eşleştirme yeteneğini kullanabilirsiniz .

Bunun uğruna, tüm PowerShell yapılarının işlevsel stil bloklarına nasıl gömülebilir olduğunu göstermek için bazı şartlar ve mutasyon ekledim.

Mutasyonların okunması gerekmediği durumlarda İdari haklarla çalıştırılması gereken son uyarı.

(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 }
    }                                                              
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.