我有入站防火墙规则设置,其中打开了一些本地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
答案 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