Вы должны войти, чтобы создавать сообщения и темы.

Удаление правила брандмауэра если оно существует, и создание в противном случае [Решено]

Привет народ, у меня уже мозг кипит от этой проблемы.

Мне нужно проверить существует ли правило брандмауэра с именем "Rule X", и если существует, отключить и удалить. Если НЕ существует, создать с указанными параметрами. Мне нужен один скрипт который при запуске будет переключать (создавать или удалять) конкретное правило.

Два отдельных скрипта я с помощью *.bat файлов смог сделать. А вот совместить никак не удается. Вроде как не умеет CMD проверять наличие правила брандмауэра.

Это умеет PowerChell, как то так

if(netsh advfirewall firewall show rule name="Rule X") {
  New-NetFirewallRule -DisplayName "Rule X" -Description "Тест" -Direction Inbound -Program "C:\Folder\Test\common\Test folder\APP.exe" -Protocol udp -Localport 6672 -RemoteAddress LocalSubnet -Action Allow
}

Но проверить работает ли оно у меня никак не получается. Скрипт Скопированоtest.ps1 закрывается сразу же после открытия не давая посмотреть что в нем выполняется (и выполняется ли)

Я впервые пытаюсь сделать что то на PowerShell, несколько часов пытался разобраться сам да все ника не выходит...

Валера, Привет.
На BAT.

@echo off
netsh advfirewall firewall show rule name="Rule X" >nul 2>&1

if %errorlevel% neq 0 (
netsh advfirewall firewall add rule name="Rule X" description="Описание" dir=in action=allow program="Путь к приожению" protocol=udp localport=6672 remoteip=localsubnet
ren "%~f0" "Rule X_ON.bat"
) else (
netsh advfirewall firewall delete rule name="Rule X"
ren "%~f0" "Rule X_OFF.bat"
)

Если правило добавлено, переименовывается в ON, если удалил в OFF.

Лайкнул Psydiant
Psydiant
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Почему оно не работает? Что я делаю не так?

@echo off
netsh advfirewall firewall show rule name="@Rule X" >nul 2>&1

if %errorlevel% neq 0 (
chcp 65001
netsh advfirewall firewall add rule name="@Rule X" description="Тест" dir=in program= "%SystemDrive%\Test\common\Test app\app.exe" protocol=udp localport=6672 action=allow
pause ) else (
netsh advfirewall firewall set rule name="@Rule X" new enable=no
netsh advfirewall firewall delete rule name="@Rule X"
pause
)

Сохраняю как *.bat файл, создаю ярлык этого файла и в свойствах запуск от имени администратора. Запускаю, скрипт тут же закрывается и ничего не делает.

Тоже самое если ПКМ по файлу, запуск от имени администратора.

Если открыть просто, без прав, от ругается что нет прав администратора.

Как заставить эту шляпу работать? С PowerShell тоже самое было, закрывается сразу же после открытия...

Валера, Я тебе дал рабочий вариант, включает и удаляет, что ты тут сам состряпал не понятно, паузы натыкал зачем-то, для чего?, если он работает то правило будет создано, зайти в брандмауэр и посмотри, Скопированоprogram= ", тут пробел лишний.

«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
Цитата: Mikhail от 01.07.2024, 04:54

Валера, Я тебе дал рабочий вариант

Где ты мне дал рабочий вариант? ren "%~f0" "Rule X_ON.bat" это что такое? Что за файл Rule X_ON.bat? У меня такого нет!

Цитата: Mikhail от 01.07.2024, 04:54

паузы натыкал зачем-то, для чего?

Что б проверить что оно работает, я уже находил в интернете похожий пример который сначала выполнял действия из IF а потом тут же в этом же скрипте делал ELSE. То есть один и тот же скрипт создавал правило и тут же его удалял. Пауза помогала проверить что так все и происходит, а тут даже она не спасает

 

Цитата: Mikhail от 01.07.2024, 04:54

если он работает то правило будет создано, зайти в брандмауэр и посмотри

В том то и дело что он не работает, не появляется там правило. Если отдельно запустить скрипт

chcp 65001 
netsh advfirewall firewall add rule name="@Rule X" description="Тест" dir=in program="%SystemDrive%\Test\common\Test app\app.exe" protocol=udp localport=6672 action=allow

То правило появится. Если запустить

netsh advfirewall firewall set rule name="@Rule X" new enable=no
netsh advfirewall firewall delete rule name="@Rule X"

Правило удалится.

По отдельности все работает, в твоем примере - нет

Цитата: Mikhail от 01.07.2024, 04:54

Скопированоprogram= ", тут пробел лишний.

Исправил, ничего не изменилось

Приду запишу видео, через час примерно.

Тебе просто надо скопировать мой код в Батник, отредактировать где я написал и все....Если не работает, то проблемы у тебя, так как я не выкладываю то, что я сам не проверил 10-ки раз.

«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
Цитата: Mikhail от 01.07.2024, 05:14

Тебе просто надо скопировать мой код в Батник, отредактировать где я написал и все....

Что отредактировать? Что вообще делает твой код? У меня появилось смутное сомнение что он делает вообще не то о чем я писал? Где в твоем примере код который создает или удаляет правило брандмауэра?

Он что переименовывает сам себя после запуска? Зачем?

Давай начнем разжёвывать.

Где ты мне дал рабочий вариант? ren "%~f0" "Rule X_ON.bat" это что такое? Что за файл Rule X_ON.bat? У меня такого нет!

Второй пост мой, полностью рабочий код, Скопированоren "%~f0" "Rule X_ON.bat" переименовывает себя да, для чего?, для визуализации, что правило добавлено, если еще раз нажать, получим OFF, правило удалено, если не нужно, можно эту часть кода.

Что б проверить что оно работает, я уже находил в интернете похожий пример который сначала выполнял действия из IF а потом тут же в этом же скрипте делал ELSE. То есть один и тот же скрипт создавал правило и тут же его удалял. Пауза помогала проверить что так все и происходит, а тут даже она не спасает

Поэтому и добавил ON и OFF переименование чтоб видно было, добавлено или удалено, то есть какой блок кода сработал и никаких пауз + можно зайти в брандмауэр и убедится что все работает.

По отдельности все работает, в твоем примере - нет

Работает, как часы — Видео и если хочется чтоб кириллицу распознавало, то надо добавить Скопированоchcp 65001 >nul в начало, после Скопировано@echo off сразу

Что отредактировать?

Вот это.

Что вообще делает твой код?

То, что и просил.

У меня появилось смутное сомнение что он делает вообще не то о чем я писал? Где в твоем примере код который создает или удаляет правило брандмауэра?

Лайкнули ЯR и Psydiant
ЯRPsydiant
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Mikhail, День добрый. Я немного не по теме. Я вот поражаюсь твоей выдержанностью, корректности в общении. При этом, если посмотреть в целом, уже почти 12000 тысяч сообщений на данном форуме. Всегда помогаешь людям, буквально "разжевываешь" и кладешь в рот готовое, при этом на блюдечке. Хотел сказать от всего сообщества данного форума (думаю, все будут согласны) большое спасибо за всю оказанную нам помощь. Ну и название ботника в видео - это креативно. =)))

Лайкнули Mikhail, Дмитрий и ещё 2
MikhailДмитрийЯRСергей
Цитата: Mikhail от 01.07.2024, 06:25

Второй пост мой, полностью рабочий код, Скопированоren "%~f0" "Rule X_ON.bat" переименовывает себя да, для чего?, для визуализации, что правило добавлено, если еще раз нажать, получим OFF, правило удалено, если не нужно, можно эту часть кода.

Батник нельзя просто так запустить, нужно запускать от имени админа что требует лишних действий, как это обходится? Созданием ярлыка который может запускать батник от имени админа, но при этом имя батника должно оставаться прежним, или использовать два ярлыка что менее удобно.

Я уже решил свою проблему. В начало названия правила я добавлял символ @ что б не искать его где кто в середине, что б правило всегда было в самом верху, если оно существует. И батник я называл точно так же как и правило, с символов @ в начале по той же причине. И из-за этого, из-за символа @ в имени батника, он не работал. И не важно какой внутри код, твой мой или какой то другой.

Батник нельзя просто так запустить, нужно запускать от имени админа что требует лишних действий, как это обходится?

Я тебе видео для чего записал?, я там запускаю просто так😅

Я уже решил свою проблему

Слава богу🙏

«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн
Цитата: Mikhail от 01.07.2024, 16:11

Я тебе видео для чего записал?, я там запускаю просто так😅

Просто так не создается правило брандмауэера, для этого нужны права админа