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