如何删除大量防火墙规则Windows Server 2019?

问题描述

我有12台服务器(会话主机),每个服务器上都有成千上万的防火墙规则。在用户登录时会创建规则,而在注销时系统不会删除规则(可能是WS2016中修复的错误,但在2019年再次出现)。

我试图用powershell的 Remove-NetFirewallRule 删除规则,但是由于性能原因,它没有用。删除40k条规则(每分钟20条规则)需要33个小时。现在,我正在尝试使用netsh.exe(更快的规则)(每分钟1000条规则)来实现它,但是我无法找到如何在配置文件中过滤掉“ Any”规则(这些我想保留)。

我尝试使用powershell过滤规则,然后将其推送到netsh:

$rulesToRemove = Get-NetFirewallRule | where {$_.profile -ne "Any"} | select displayName

foreach($rule in $rulesToRemove) { netsh advfirewall firewall delete rule name=$rule }

,它适用于某些规则,而不适用于其他规则-“没有规则符合特定条件”。我尝试推送displayName,name和其他几个值,但是大多数规则根本不符合条件。这里唯一的条件是fw规则名称,因此我尝试使用netsh来获取名称,例如,我得到了类似的内容:

@ {Microsoft.Windows.Cortana_1.11.6.17763_neutral_neutral_cw5n1h2txyewy?mc-resource://Microsoft.Windows.Cortana/resources/PackageDisplayName}

甚至对于netsh都不起作用,因为它是规则名称:(。

问题:有没有办法在合理的时间内通过脚本删除成千上万的FW规则?

解决方法

就像Bill_Stewart所说的那样,您也可以点引用它。

$rulesToRemove = (Get-NetFirewallRule | where {$_.profile -eq "Any"}).DisplayName
foreach($rule in $rulesToRemove) { netsh advfirewall firewall delete rule name=$rule }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...