You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中获取非默认的Windows防火墙规则

如何在PowerShell中获取非默认的Windows防火墙规则

我完全理解你的需求——想要精准区分Windows自带的默认防火墙规则和第三方程序创建的规则,用Get-NetFirewallRule | fl *确实很难一眼分辨出来。这里给你几个更可靠的方法,从最权威的属性判断到辅助验证都有:

1. 利用Origin属性(最推荐、最可靠)

Windows系统会给默认防火墙规则标记Origin属性为Default,而第三方程序创建、手动添加的规则,这个属性值通常是Local(也可能是Manual,取决于创建方式)。这是系统原生的标记,几乎不会被第三方程序篡改,是最准确的判断依据。

你可以用这条PowerShell命令直接筛选出非默认规则:

Get-NetFirewallRule | Where-Object { $_.Origin -ne "Default" } | Select-Object DisplayName, Origin, Direction, Enabled

这条命令会列出所有非默认规则的名称、来源、方向(入站/出站)和启用状态,方便你快速查看。

2. 结合Author属性辅助验证

默认规则的Author属性几乎都是Microsoft Corporation,而第三方程序创建的规则通常会标注软件厂商的名称,或者是自定义的作者信息。你可以用这条命令过滤:

Get-NetFirewallRule | Where-Object { $_.Author -ne "Microsoft Corporation" } | Select-Object DisplayName, Author, Program

不过这个方法有小概率例外——比如有些第三方程序可能会故意设置作者为微软,但这种情况非常少见,还是可以作为辅助判断的手段。

3. 结合你观察到的组名和程序路径特征

你提到的默认规则都有组名、程序路径多为%SystemRoot%\*或System的特征,确实可以作为补充筛选条件。比如这条命令:

Get-NetFirewallRule | Where-Object { 
    (-not $_.Group) -or 
    ($_.Program -notlike "%SystemRoot%*" -and $_.Program -ne "System" -and $_.Program -ne "SYSTEM")
} | Select-Object DisplayName, Group, Program

它会过滤掉那些有明确组名且程序路径属于系统目录的规则,剩下的大概率是第三方创建的。不过要注意,少数第三方程序也可能给自己的规则添加组名,所以这个方法最好和前面的Origin判断结合使用。

总结一下,优先用Origin属性筛选,再配合Author、组名、程序路径这些特征交叉验证,就能精准找出所有非默认的防火墙规则啦。

备注:内容来源于stack exchange,提问作者user20682592

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:07:44