2012-07-05 38 views
9

Tôi đang thêm quy tắc tường lửa của cửa sổ bằng cách sử dụng lệnh netsh advfirewall firewall lệnh trong chương trình thiết lập. Mã của tôi đang đưa ra một thông báo lỗi nếu hệ thống đã tắt tường lửa của cửa sổ.Cách kiểm tra tường lửa của cửa sổ được bật hay không bằng cách sử dụng các lệnh

Vì vậy, tôi cần kiểm tra trạng thái tường lửa của cửa sổ trước khi thực hiện lệnh tường lửa netsh advfirewall thêm. tức là, nếu tường lửa bị tắt, không cần thêm quy tắc.

Tôi đang kiểm tra xem tường lửa có được bật hay không bằng cách sử dụng giá trị sổ đăng ký "EnableFirewall".

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ SharedAccess \ Parameters \ FirewallPolicy \ StandardProfile

Tôi không chắc chắn đây là một cách đúng đắn. Cũng có thể có cấu hình tường lửa miền (?).

Xin cảm ơn trước.

+0

Tôi nghĩ rằng tôi có thể tìm thấy nó từ giá trị đăng ký HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ SharedAccess \ Parameters. – JChan

+1

Hãy nhớ rằng tường lửa Windows có thể không phải là tường lửa duy nhất hoạt động. –

Trả lời

8

Một tùy chọn khác là tự sử dụng netsh để kiểm tra xem tường lửa có được bật hay không. Thực hiện lệnh netsh advfirewall show private|public|domain. Nó sẽ bật/tắt trạng thái.

+7

Không hoạt động trong Win7 pro. Những gì đã làm việc là 'netsh advfirewall hiển thị currentprofile'. – Macke

+0

Lệnh này là ** 'netsh advfirewall hiển thị tất cả trạng thái' **.Bạn có thể thay thế ** 'all' ** bởi **' private' ** hoặc ** 'public' ** hoặc **' domain' ** – Paul

0

Tôi mới làm quen với điều này nhưng tôi đã sử dụng truy vấn reg để nhận thông tin chi tiết như thế nào.

nhập điều này vào dòng lệnh và nhấn enter.

reg query \\IP_Address\HEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile 

Tôi đã sử dụng nó trong các tác phẩm của mình và cũng đang sử dụng lệnh bên dưới.

reg query \\ip_address\path 
+0

Chữ 'K' bị thiếu trong HKEY từ đường dẫn đăng ký. SO sẽ không cho phép tôi chỉnh sửa vì nó ít hơn một thay đổi 6 ký tự ... – voidmain

2

Invoke-Command -ComputerName <servername> -Credential <username> -ScriptBlock {[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine",$env:COMPUTERNAME).OpenSubKey("System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile").GetValue("EnableFirewall")}

1 phương tiện kích hoạt.

+1

Bạn nên truy vấn CurrentControlSet, không phải bất kỳ ControlSet nào. –

0

Tôi chỉ phải làm điều gì đó tương tự cho một môi trường mà tôi đã tiếp quản. Tôi đã sử dụng bên dưới để kiểm tra trạng thái cho cả ba tiểu sử.

invoke-command -computername $computer -scriptblock { 
    try{ get-netfirewallprofile | select name,enabled } 
    catch{ netsh advfirewall show all state } 
} 

khối thử sẽ hoạt động với máy chủ 2012 hoặc windows 8 và các hệ thống mới hơn. nếu điều đó thất bại khi nó ném một lỗi về việc không có lệnh ghép ngắn sẽ bị bắt và thay vì cho bạn lỗi, nó sẽ rơi trở lại bằng cách sử dụng netsh để hiển thị thông tin.

Tôi đã sử dụng tính năng này trên máy chủ 2008 R2, 2012 R2 và 2016 với kết quả tốt. Hi vọng nó sẽ giúp ích cho bạn!

-2
$Compliance = 'Non-Compliant' 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Domain' -and $_.Enabled -eq 'True'} 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Public' -and $_.Enabled -eq 'True'} 
$Check = get-netfirewallprofile | Where-Object {$_.Name -eq 'Private' -and $_.Enabled -eq 'True'} 
if ($Check) {$Compliance = 'Compliant'} 
$Compliance 
+0

Cảm ơn bạn đã trích đoạn mã này, đoạn mã này có thể cung cấp một số trợ giúp tức thì, có giới hạn. [Giải thích đúng sẽ cải thiện đáng kể giá trị lâu dài của nó] (// meta.stackexchange.com/q/114762/206345) bằng cách hiển thị _why_ đây là giải pháp tốt cho vấn đề và sẽ hữu ích hơn cho người đọc trong tương lai các câu hỏi tương tự khác. Vui lòng [sửa] câu trả lời của bạn để thêm một số giải thích, bao gồm các giả định bạn đã thực hiện. – gunr2171

Các vấn đề liên quan