You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过PowerShell检查Windows防火墙是否允许指定应用程序通信

如何通过PowerShell检查Windows防火墙是否允许指定应用程序通信

嗨,我来帮你搞定这个需求!在Windows 10里用PowerShell程序化检查某个应用是否能通过Windows Defender防火墙访问不同网络(域、专用、公用),其实用系统自带的防火墙管理命令就能轻松实现,下面给你一步步说明:

核心思路

我们主要用到两个PowerShell cmdlet:

  • Get-NetFirewallApplicationFilter:用来筛选关联到特定应用程序的防火墙过滤规则
  • Get-NetFirewallRule:获取具体的防火墙规则详情,包括网络权限配置

具体操作步骤

假设你要检查的应用是C:\Program Files\Python\python.exe,可以按以下步骤来:

  1. 定义应用路径并获取对应防火墙规则
    先运行这段代码,把目标应用的路径赋值给变量,然后关联到它的防火墙规则:

    # 替换成你要检查的应用路径
    $targetApp = "C:\Program Files\Python\python.exe"
    # 获取该应用对应的所有防火墙规则
    $appFirewallRules = Get-NetFirewallApplicationFilter | Where-Object { $_.Program -eq $targetApp } | Get-NetFirewallRule
    
  2. 查看各网络类型的允许状态
    接下来遍历获取到的规则,就能看到这个应用在不同网络下的权限了:

    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

火山引擎 最新活动