将本地端口添加到现有 Windows 防火墙规则
Adding Local Port to existing Windows firewall rule
我的入站防火墙规则设置打开了一些本地 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
语句)将变量输出到文本文件。然后我们使用 set value=%%
.
阅读和调整
请记住此脚本 可以 使用 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
我的入站防火墙规则设置打开了一些本地 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
语句)将变量输出到文本文件。然后我们使用 set value=%%
.
请记住此脚本 可以 使用 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