Làm cách nào tôi có thể sử dụng Netsh để tìm quy tắc sử dụng mẫu


10

Tôi tự hỏi liệu có ai ở Microsoft đã từng gặp phải tình huống mà họ không thể nhớ tên của một quy tắc hay không!
Các netsh advfirewall firewall show rulechỉ chấp nhận 1 tên và không có cơ sở mô hình phù hợp nào trên netsh để giúp đỡ tìm một quy tắc sử dụng một mô hình như "SQL*"hay ^SQL.+$
sử dụng chương trình và name=allchúng ta có thể liệt kê tất cả quy tắc nhưng tôi đã không thể tìm thấy một công cụ grep dòng lệnh vững chắc cho các cửa sổ.

Tôi muốn có thể chạy một lệnh như thế này:

netsh advfirewall firewall show rule name=sql*

Điều này có thể không?


1
một câu trả lời nhanh sẽ là : netsh advfirewall firewall show rule name=all | find "SQL"; nhưng đầu ra và điều khiển không thỏa mãn như mong muốn. Nó khá lộn xộn và thậm chí tệ hơn, Phân biệt chữ hoa chữ thường ...
Achilles

nghĩ rằng liên kết sau đây có thể giúp blog.technet.com/b/jamesone/archive/2009/02/18/NH
tony roth

Sử dụng Powershell là một lựa chọn khác; Đúng. Nhưng nếu bạn muốn làm điều này trên một máy từ xa thì sao? Có thể để các cổng từ xa cho PS mở và có IDS / IPS như những gì tôi có với BvSsshServer không? Tôi đang tìm kiếm một cái gì đó có sẵn trong dấu nhắc lệnh gốc của Windows.
Achilles

Có vẻ như có thể bảo mật PS bằng SSL: technet.microsoft.com/en-us/magazine/ff700227.aspx
Achilles

Tôi đã tìm thấy rằng việc sử dụng /Ivới FINDlệnh, tôi có thể né tránh các vấn đề trường hợp nhạy cảm; nhưng kết quả vẫn còn lộn xộn ...
Achilles

Câu trả lời:


10

Trong PowerShell chạy:

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

tốt hơn nữa

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

1
$ fw.rules | where-object {$ _. Đã bật -eq $ true -và $ _. Direction -eq 1} Đã giúp tôi đến đây (bật trong nước).
Bratch

1
hơn nữa, bạn chỉ có thể chọn một số thuộc tính nhất định của quy tắc. $fw.Rules | where-object {$_.Enabled -eq $true -and $_.Direction -eq 1} | Select-Object -property name, direction, enabled
Dan Pritts 6/11/2015

1
Tôi bối rối, điều này có nghĩa là được chạy trong một dấu nhắc Netsh? Hay một số môi trường khác?
jjxtra

Điều này phải được chạy trong lời nhắc PowerShell hoặc là một phần của tập lệnh PowerShell (.ps1). New-Objectlà một lệnh ghép ngắn PowerShell cung cấp quyền truy cập vào API COM cũ hơn nhiều trong khi duy trì cấu trúc đối tượng và cú pháp PowerShell.
BaseZen

4

Điều này là tốt nhất tôi có thể làm. Bất cứ ai biết làm thế nào để đưa nó xa hơn? Giống như loại bỏ / trừ Tên quy tắc khỏi kết quả?

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

3

Trên Windows 10 tôi nhận được cảnh báo khi thực thi netsh advfirewall, nói rằng các phiên bản Windows trong tương lai có thể không hỗ trợ tính năng đó nữa và thay vào đó nên sử dụng PowerShell. May mắn thay, những gì OP muốn làm thật dễ dàng trong PowerShell:

Get-NetFirewallRule -DisplayName "SQL*"

Tôi đã có hơn 1000 quy tắc tường lửa được tạo bởi một tệp thực thi có tên ngẫu nhiên mà tôi muốn xóa. Lệnh sau đây giúp bạn dễ dàng thực hiện:

Remove-NetFirewallRule -DisplayName "*mongod.exe"


2

Bạn có thể thử chuỗi chọn :

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

1
Vui lòng không downvote mà không kiểm tra xem bạn đang ở trong điều kiện cần thiết để giải pháp này hoạt động.
Loul G.

1

Nếu không có PowerShell, bạn chỉ cần sử dụng regex với findstr:

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

0

Điều này được thừa nhận là một câu trả lời đuôi áo nhưng một nhận xét sẽ che khuất điểm.

Điều này cũng được thừa nhận trả lời một câu hỏi hơi khác: làm thế nào tôi không thể sử dụng netshvà vẫn tìm thấy các quy tắc? :-)

Tôi nghĩ tốt nhất nên ở trong thành ngữ PowerShell nếu bạn đã ở đó và bạn có thể sử dụng khả năng khớp mẫu đầy đủ bao gồm cả biểu thức chính tả trong đó.

Vì lợi ích của nó, tôi đã đưa vào một số điều kiện và đột biến để cho thấy tất cả các cấu trúc PowerShell có thể nhúng trong các khối kiểu chức năng.

Thông báo cuối cùng rằng các đột biến phải được chạy với quyền Quản trị khi không cần đọc.

(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 }
    }                                                              
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.