正在将本地端口添加到现有的Windows防火墙规则中



我设置了入站防火墙规则,打开了一些本地TCP端口。这些端口是可配置的,可以更改(目前为2501和4300(我正在尝试编写一个简单的批处理脚本,为现有规则添加额外的端口。我试过:

netsh advfirewall firewall set rule name=%RULE_NAME% new localport=%PORT%

但该命令会覆盖规则中我的当前端口,只留下一个新端口(%PORT%(。也尝试过:

netsh advfirewall firewall add rule name=%RULE_NAME% dir=in action=allow protocol=TCP localport=%PORT%

但这个正在创建新规则(同名(。这可能奏效,但看起来有点难看。

是否有一个命令只会将%PORT%添加到现有端口。或者我可以以某种方式将当前端口保存到变量中,然后将它们添加到覆盖现有规则的新规则中(第一个命令(?

感谢


编辑根据@John Kens的代码,我写了一个脚本。添加了语言识别部分>到目前为止,仅适用于英语和德语。如果能创造一些独立于语言的东西,那就太好了。也许下次。。。

@SETLOCAL EnableDelayedExpansion
@CD %~dp0
:: get Language ID
for /f "tokens=2 delims==" %%A in ('wmic path win32_OperatingSystem get OSLanguage /Value') do set Language=%%A
echo %Language%
::germain
IF %Language% EQU 1031 ( 
SET SearchString="Lokaler Port"
) ELSE (
::engilsh
IF %Language% EQU 1033 ( 
SET SearchString="LocalPort"
) ELSE goto :eof
)
echo %SearchString%
::Get the LocalPort to Variable
netsh advfirewall firewall show rule name="%RULE_NAME%" | findstr %SearchString% > p1o2r3t4.txt
set /P port=<p1o2r3t4.txt
REM del /Q p1o2r3t4.txt
echo port: %port%
::Edit port format from Variable
set eport1=%port: =%
set eport2=%eport1:*Port:=%
echo eport1: %eport1%
echo eport2: %eport2%
::Edit and add new port to existing rule
cls
netsh advfirewall firewall set rule name="%RULE_NAME%" new localport=%eport2%,%NEW_PORT%
goto :eof

因此,假设您只是想向现有规则名称添加端口,则可以使用netsh advfirewall firewall set rule语法。但是,通过取消替换此命令,它将覆盖现有的port值。为了克服这一问题,您需要抓取已经存在的值,并将它们设置在1234,2222,1234,NEW_PORT格式的新值之前。

下面的脚本使用| findstr(无法在netsh advfirewall firewall上批量使用FOR /F语句(将变量输出到文本文件。然后我们使用CCD_ 7进行读取和调整。

请记住,此脚本可以使用port1,port2,port3格式将多个端口同时添加到单个规则中。请确保以管理员身份运行脚本。

@ECHO OFF
@SETLOCAL EnableDelayedExpansion
@CD %~dp0
::Check for Admin rights; Exit if no rights
NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (goto :BEGIN) ELSE (Echo ERROR: You must run as admin. && pause && goto :eof)
:BEGIN
::Ask for rule name & port
set /p RULE_NAME=What rule name do you wish to add port's to: 
set /p NEW_PORT=What port(s) do you wish to add to "%RULE_NAME%": 
::Get the LocalPort to Variable
netsh advfirewall firewall show rule name="%RULE_NAME%" | findstr "LocalPort" >> p1o2r3t4.txt
set /P port=<p1o2r3t4.txt
del /Q p1o2r3t4.txt
::Edit port format from Variable
set eport1=%port: =%
set eport2=%eport1:LocalPort:=%
echo %eport2%
::Edit and add new port to existing rule
cls
netsh advfirewall firewall set rule name="%RULE_NAME%" new localport=%eport2%,%NEW_PORT%
pause
goto :eof

相关内容

  • 没有找到相关文章

最新更新