简体   繁体   English

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

[英]Duplicated Windows firewall rules (Netsh AdvFirewall firewall)

I've noticed that when we create a firewall rule through netsh advfirewall firewall , it can be run multiple times, creating multiple identical firewall rules. 我注意到,当我们通过netsh advfirewall firewall创建防火墙规则时,它可以多次运行,创建多个相同的防火墙规则。

Is there any way of checking if the firewall rule exists before attempting to create a new one? 在尝试创建新规则之前,有没有办法检查防火墙规则是否存在?

检查规则“myrule”是否不存在

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

I managed to get this going through PowerShell's Network Security Cmdlets, the following code will check for a named firewall rule along with a specified local port, if it finds an entry, it does not create the rule. 我设法通过PowerShell的Network Security Cmdlet进行此操作,以下代码将检查指定的防火墙规则以及指定的本地端口,如果找到条目,则不会创建规则。 If it does not find an entry, it will create the rule 如果找不到条目,​​则会创建规则

$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"
}

To expand on @Oleg's answer, here is what I use. 为了扩展@ Oleg的答案,这是我使用的。 Replace the ... according to the criteria for your rule. 根据您的规则标准替换....

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! ...
)
Get-Command -Module NetSecurity
get-help Get-NetFirewallRule -full

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM