Удаление правила брандмауэра если оно существует, и создание в противном случае [Решено]
Цитата: Валера от 30.06.2024, 02:35Привет народ, у меня уже мозг кипит от этой проблемы.
Мне нужно проверить существует ли правило брандмауэра с именем "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, несколько часов пытался разобраться сам да все ника не выходит...
Привет народ, у меня уже мозг кипит от этой проблемы.
Мне нужно проверить существует ли правило брандмауэра с именем "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, несколько часов пытался разобраться сам да все ника не выходит...
Цитата: Mikhail от 30.06.2024, 04:33Валера, Привет.
На 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.
Валера, Привет.
На 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.
Цитата: Валера от 01.07.2024, 04:47Почему оно не работает? Что я делаю не так?
@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 тоже самое было, закрывается сразу же после открытия...
Почему оно не работает? Что я делаю не так?
@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 тоже самое было, закрывается сразу же после открытия...
Цитата: Mikhail от 01.07.2024, 04:54Валера, Я тебе дал рабочий вариант, включает и удаляет, что ты тут сам состряпал не понятно, паузы натыкал зачем-то, для чего?, если он работает то правило будет создано, зайти в брандмауэр и посмотри,
program= ", тут пробел лишний.
Валера, Я тебе дал рабочий вариант, включает и удаляет, что ты тут сам состряпал не понятно, паузы натыкал зачем-то, для чего?, если он работает то правило будет создано, зайти в брандмауэр и посмотри, Скопированоprogram= ", тут пробел лишний.
Цитата: Валера от 01.07.2024, 05:07Цитата: 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= ", тут пробел лишний.Исправил, ничего не изменилось
Цитата: 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= ", тут пробел лишний.
Исправил, ничего не изменилось
Цитата: Mikhail от 01.07.2024, 05:14Приду запишу видео, через час примерно.
Тебе просто надо скопировать мой код в Батник, отредактировать где я написал и все....Если не работает, то проблемы у тебя, так как я не выкладываю то, что я сам не проверил 10-ки раз.
Приду запишу видео, через час примерно.
Тебе просто надо скопировать мой код в Батник, отредактировать где я написал и все....Если не работает, то проблемы у тебя, так как я не выкладываю то, что я сам не проверил 10-ки раз.
Цитата: Валера от 01.07.2024, 05:17Цитата: Mikhail от 01.07.2024, 05:14Тебе просто надо скопировать мой код в Батник, отредактировать где я написал и все....
Что отредактировать? Что вообще делает твой код? У меня появилось смутное сомнение что он делает вообще не то о чем я писал? Где в твоем примере код который создает или удаляет правило брандмауэра?
Он что переименовывает сам себя после запуска? Зачем?
Цитата: Mikhail от 01.07.2024, 05:14Тебе просто надо скопировать мой код в Батник, отредактировать где я написал и все....
Что отредактировать? Что вообще делает твой код? У меня появилось смутное сомнение что он делает вообще не то о чем я писал? Где в твоем примере код который создает или удаляет правило брандмауэра?
Он что переименовывает сам себя после запуска? Зачем?
Цитата: Mikhail от 01.07.2024, 06:25Давай начнем разжёвывать.
Где ты мне дал рабочий вариант? 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сразуЧто отредактировать?
Что вообще делает твой код?
То, что и просил.
У меня появилось смутное сомнение что он делает вообще не то о чем я писал? Где в твоем примере код который создает или удаляет правило брандмауэра?
Давай начнем разжёвывать.
Где ты мне дал рабочий вариант? 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 сразу
Что отредактировать?
Что вообще делает твой код?
То, что и просил.
У меня появилось смутное сомнение что он делает вообще не то о чем я писал? Где в твоем примере код который создает или удаляет правило брандмауэра?
Цитата: Arman от 01.07.2024, 12:02Mikhail, День добрый. Я немного не по теме. Я вот поражаюсь твоей выдержанностью, корректности в общении. При этом, если посмотреть в целом, уже почти 12000 тысяч сообщений на данном форуме. Всегда помогаешь людям, буквально "разжевываешь" и кладешь в рот готовое, при этом на блюдечке. Хотел сказать от всего сообщества данного форума (думаю, все будут согласны) большое спасибо за всю оказанную нам помощь. Ну и название ботника в видео - это креативно. =)))
Mikhail, День добрый. Я немного не по теме. Я вот поражаюсь твоей выдержанностью, корректности в общении. При этом, если посмотреть в целом, уже почти 12000 тысяч сообщений на данном форуме. Всегда помогаешь людям, буквально "разжевываешь" и кладешь в рот готовое, при этом на блюдечке. Хотел сказать от всего сообщества данного форума (думаю, все будут согласны) большое спасибо за всю оказанную нам помощь. Ну и название ботника в видео - это креативно. =)))
Цитата: Валера от 01.07.2024, 16:08Цитата: Mikhail от 01.07.2024, 06:25Второй пост мой, полностью рабочий код,
ren "%~f0" "Rule X_ON.bat"переименовывает себя да, для чего?, для визуализации, что правило добавлено, если еще раз нажать, получим OFF, правило удалено, если не нужно, можно эту часть кода.Батник нельзя просто так запустить, нужно запускать от имени админа что требует лишних действий, как это обходится? Созданием ярлыка который может запускать батник от имени админа, но при этом имя батника должно оставаться прежним, или использовать два ярлыка что менее удобно.
Я уже решил свою проблему. В начало названия правила я добавлял символ @ что б не искать его где кто в середине, что б правило всегда было в самом верху, если оно существует. И батник я называл точно так же как и правило, с символов @ в начале по той же причине. И из-за этого, из-за символа @ в имени батника, он не работал. И не важно какой внутри код, твой мой или какой то другой.
Цитата: Mikhail от 01.07.2024, 06:25Второй пост мой, полностью рабочий код,
Скопированоren "%~f0" "Rule X_ON.bat"переименовывает себя да, для чего?, для визуализации, что правило добавлено, если еще раз нажать, получим OFF, правило удалено, если не нужно, можно эту часть кода.
Батник нельзя просто так запустить, нужно запускать от имени админа что требует лишних действий, как это обходится? Созданием ярлыка который может запускать батник от имени админа, но при этом имя батника должно оставаться прежним, или использовать два ярлыка что менее удобно.
Я уже решил свою проблему. В начало названия правила я добавлял символ @ что б не искать его где кто в середине, что б правило всегда было в самом верху, если оно существует. И батник я называл точно так же как и правило, с символов @ в начале по той же причине. И из-за этого, из-за символа @ в имени батника, он не работал. И не важно какой внутри код, твой мой или какой то другой.
Цитата: Mikhail от 01.07.2024, 16:11Батник нельзя просто так запустить, нужно запускать от имени админа что требует лишних действий, как это обходится?
Я тебе видео для чего записал?, я там запускаю просто так😅
Я уже решил свою проблему
Слава богу🙏
Батник нельзя просто так запустить, нужно запускать от имени админа что требует лишних действий, как это обходится?
Я тебе видео для чего записал?, я там запускаю просто так😅
Я уже решил свою проблему
Слава богу🙏
Цитата: Валера от 01.07.2024, 17:33Цитата: Mikhail от 01.07.2024, 16:11Я тебе видео для чего записал?, я там запускаю просто так😅
Просто так не создается правило брандмауэера, для этого нужны права админа
Цитата: Mikhail от 01.07.2024, 16:11
Я тебе видео для чего записал?, я там запускаю просто так😅
Просто так не создается правило брандмауэера, для этого нужны права админа
