重复的Windows防火墙规则(Netsh AdvFirewall firewall)

重复的Windows防火墙规则(Netsh AdvFirewall firewall),windows,firewall,rules,netsh,idempotent,Windows,Firewall,Rules,Netsh,Idempotent,我注意到,当我们通过netsh advfirewall firewall创建防火墙规则时,它可以运行多次,从而创建多个相同的防火墙规则 在尝试创建新的防火墙规则之前,是否有任何方法可以检查防火墙规则是否存在?我通过PowerShell的网络安全cmdlet成功地实现了这一点,以下代码将检查命名的防火墙规则以及指定的本地端口,如果找到条目,则不会创建规则。如果没有找到条目,它将创建规则 $firewallPort = "" $firewallRuleName = "" write-host "C

我注意到,当我们通过
netsh advfirewall firewall
创建防火墙规则时,它可以运行多次,从而创建多个相同的防火墙规则


在尝试创建新的防火墙规则之前,是否有任何方法可以检查防火墙规则是否存在?

我通过PowerShell的网络安全cmdlet成功地实现了这一点,以下代码将检查命名的防火墙规则以及指定的本地端口,如果找到条目,则不会创建规则。如果没有找到条目,它将创建规则

$firewallPort = ""
$firewallRuleName = ""

write-host "Checking for '$firewallRuleName' firewall rule on port '$firewallPort' now...."
if ($(Get-NetFirewallRule –DisplayName $firewallRuleName | Get-NetFirewallPortFilter | Where { $_.LocalPort -eq $firewallPort }))
{
    write-host "Firewall rule for '$firewallRuleName' on port '$firewallPort' already exists, not creating new rule"
}
else
{
    write-host "Firewall rule for '$firewallRuleName' on port '$firewallPort' does not already exist, creating new rule now..."
    New-NetFirewallRule -DisplayName $firewallRuleName -Direction Inbound -Profile Domain,Private,Public -Action Allow -Protocol TCP -LocalPort $firewallPort -RemoteAddress Any
    write-host "Firewall rule for '$firewallRuleName' on port '$firewallPort' created successfully"
}
检查规则“myrule”是否不存在

netsh advfirewall firewall show rule name="myrule" | findstr "no rules"

为了扩展@Oleg的答案,下面是我使用的。替换。。。根据您规则的标准

set name="my rule"
netsh advfirewall firewall show rule name=!name! >nul
if errorlevel 1 (
    echo Adding firewall rule !name!
    netsh advfirewall firewall add rule name=!name! ...
)

为什么没有人提到批量故障的| |运算符? 与&&success运算符相反

:: (if command errors) || (exec this command)
netsh advfirewall firewall show rule name="myrule" >nul || netsh advfirewall firewall add rule name="myrule" ...

,感谢您提供此代码片段,它可能会提供一些有限的即时帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的答案中添加一些解释,包括您所做的假设。将结果文本解析为英语单词是不安全的,因为用户可能有不同的操作系统语言,或者措辞可能最终会改变。
:: (if command errors) || (exec this command)
netsh advfirewall firewall show rule name="myrule" >nul || netsh advfirewall firewall add rule name="myrule" ...