如何通过PowerShell检查Windows防火墙是否允许指定应用程序通信
如何通过PowerShell检查Windows防火墙是否允许指定应用程序通信
嗨,我来帮你搞定这个需求!在Windows 10里用PowerShell程序化检查某个应用是否能通过Windows Defender防火墙访问不同网络(域、专用、公用),其实用系统自带的防火墙管理命令就能轻松实现,下面给你一步步说明:
核心思路
我们主要用到两个PowerShell cmdlet:
Get-NetFirewallApplicationFilter:用来筛选关联到特定应用程序的防火墙过滤规则Get-NetFirewallRule:获取具体的防火墙规则详情,包括网络权限配置
具体操作步骤
假设你要检查的应用是C:\Program Files\Python\python.exe,可以按以下步骤来:
定义应用路径并获取对应防火墙规则
先运行这段代码,把目标应用的路径赋值给变量,然后关联到它的防火墙规则:# 替换成你要检查的应用路径 $targetApp = "C:\Program Files\Python\python.exe" # 获取该应用对应的所有防火墙规则 $appFirewallRules = Get-NetFirewallApplicationFilter | Where-Object { $_.Program -eq $targetApp } | Get-NetFirewallRule查看各网络类型的允许状态
接下来遍历获取到的规则,就能看到这个应用在不同网络下的权限了:if ($appFirewallRules) { foreach ($rule in $appFirewallRules) { Write-Host "=== 规则名称: $($rule.DisplayName) ===" Write-Host "域网络权限: $($rule.Profile.Domain)" Write-Host "专用网络权限: $($rule.Profile.Private)" Write-Host "公用网络权限: $($rule.Profile.Public)" Write-Host "规则动作: $($rule.Action)" # Allow表示允许,Block表示阻止 Write-Host "-------------------------" } } else { Write-Host "未找到该应用对应的防火墙规则,说明它还没被添加到防火墙的允许/阻止列表中" }
注意事项
- 建议以管理员身份运行PowerShell,否则可能无法读取部分防火墙规则的详细信息
- 有些应用可能有多条防火墙规则(比如分别对应入站、出站流量),上面的代码会把所有相关规则都列出来
- 输出里的
Profile属性值:Allow代表该网络下允许通信,Block代表阻止,NotApplicable则表示这条规则不适用该网络类型
备注:内容来源于stack exchange,提问作者JamesThomasMoon




