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

时间:2018-07-20 14:56:52

标签: batch-file netsh

我有入站防火墙规则设置,其中打开了一些本地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代码,我编写了一个脚本。到目前为止,添加了带有语言识别的部分>,仅适用于英语和Germain。创建独立于语言的东西会很好。也许下次...

 @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

1 个答案:

答案 0 :(得分:0)

因此,假设您只是想将端口添加到现有规则名称中,则可以使用netsh advfirewall firewall set rule语法。但是,通过默认该命令,它将覆盖现有的port值。为了解决这个问题,您需要抓住已有的值,并以1234,2222,1234,NEW_PORT格式在新值之前设置它们。

下面的脚本使用| findstr(无法在FOR /F上批量使用netsh advfirewall firewall语句)将变量输出到文本文件。然后,我们使用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