Дублированные правила брандмауэра Windows (брандмауэр Netsh AdvFirewall)

Я заметил, что когда мы создаем правило брандмауэра через netsh advfirewall firewall, его можно запускать несколько раз, создавая несколько одинаковых правил брандмауэра.

Есть ли способ проверить, существует ли правило брандмауэра, прежде чем пытаться создать новое?


person ShaneC    schedule 24.08.2015    source источник


Ответы (5)


Проверить, не существует ли правило "myrule"

netsh advfirewall firewall show rule name="myrule" | findstr "no rules"
person Oleg    schedule 11.07.2016
comment
Небезопасно анализировать результирующий текст на наличие английских слов, потому что у пользователя может быть другой язык ОС или формулировка может в конечном итоге измениться. - person bytecode77; 28.09.2020

Мне удалось выполнить это с помощью командлетов сетевой безопасности PowerShell, следующий код проверит именованное правило брандмауэра вместе с указанным локальным портом, если он найдет запись, он не создаст правило. Если он не найдет запись, он создаст правило

$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"
}
person ShaneC    schedule 24.08.2015

Чтобы расширить ответ @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! ...
)
person ouk    schedule 16.07.2019

почему никто не упомянул || оператор для сбоев в пакетном режиме? противоположность оператора успеха &&

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

person    schedule
comment
Как ответить, тур - person Yunnosch; 26.07.2019
comment
Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. правильное объяснение значительно улучшит его долгосрочную ценность, показав, почему это хорошее решение проблемы и сделать его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения. - person CertainPerformance; 27.07.2019