有没有办法用脚本或某些应用程序删除重复的 Windows 防火墙规则

有没有办法用脚本或某些应用程序删除重复的 Windows 防火墙规则

我的 PC 上有很多防火墙规则,其中很多都是重复的。我有 5 条完全相同的规则。这会引起某种冲突吗?

是否有任何人拥有任何类型的脚本或某些程序可以摆脱这些重复的规则?

答案1

我创建了一个 powershell 脚本来删除重复的防火墙规则。但由于它使用防火墙管理 cmdlet,因此可能无法在旧版本的 Windows 上运行。但无论如何,你可以尝试一下。

# Here we use `netsh advfirewall firewall show` to get all firewall rules, since it's way faster than Get-NetFirewallRule!!!!!!!
$output = (netsh advfirewall firewall show rule name=all verbose | Out-String).Trim() -split '\r?\n\s*\r?\n'
$propertyNames = [System.Collections.Generic.List[string]]::new()

$objects = @( $(foreach($section in $output ) {
    $obj = @{}

    foreach( $line in ($section -split '\r?\n') ) {
        if( $line -match '^\-+$' ) { continue }
        $name, $value = $line -split ':\s*', 2
        $name = $name -replace " ", ""
        
        $obj.$name  = $value
        if($propertyNames -notcontains $name) {
            $propertyNames.Add( $name )
        }
    }
    $obj
}) | % {
    foreach( $prop in $propertyNames ) {
        if( $_.Keys -notcontains $prop ) {
            $_.$prop = $null
        }
    }
    [PSCustomObject]$_
})

$r = $objects | Group-Object -Property RuleName, Program, Action, Profiles, RemoteIP, RemotePort, LocalIP, LocalPort, Enabled, Protocol, Direction
# If you want to take a look
# $r | ?{$_.Count -gt 1} | Select-Object -ExpandProperty group | Out-GridView

$r | ?{$_.Count -gt 1} | %{
    $name = $_ | Select-Object -ExpandProperty group | Select-Object -ExpandProperty RuleName -First 1
    # Here we have to use this cmdlet, since `netsh advfirewall firewall delete` can't differentiate rules with the same names and will delte them all! 
    Get-NetFirewallRule -DisplayName $name | Select-Object -Skip 1 | Remove-NetFirewallRule
}

答案2

我将使用 PowerShellRemove-NetFirewallRule来自动执行这些类型的操作;如果只有五条规则,您可以识别这些规则并将其删除,但如果您有更多规则,您应该首先弄清楚为什么有它们 - 您是否尝试安装一个应用程序五次,还是来自更新?

  • 如果您不使用 Visual Code 之类的 IDE,PowerShell ISE 将帮助您编写和执行 PowerShell 脚本
  • 您可以找到使用 的 PowerShell 脚本Remove-NetFirewallRule,例如

相关内容