如何在使用批处理脚本和 netsh 创建防火墙规则之前检查它
How to check firewall rule before creating it using batch script and netsh
我正在尝试创建一个用户只需要 运行 的批处理文件,它会添加一个防火墙规则,该脚本有效,但我想阻止用户创建多个具有相同名称的规则。
我知道如何使用 netsh -contains 检查它,但不确定如何将它转换为批处理脚本。
我现有的脚本
@Echo On
netsh advfirewall firewall add rule name= "Open Port 80-90" dir=in action=allow protocol=TCP localport=80-90
Exit
我想做什么
@Echo On
if netsh advfirewall firewall show rule name="Open Port 80-90" -contains "No rules match the specified criteria."
@Echo On
netsh advfirewall firewall add rule name= "Open Port 80-90" dir=in action=allow protocol=TCP localport=80-90
Exit
应该这样做:
netsh advfirewall firewall show rule name="Open Port 80-90" | findstr /c:"No rules match the specified criteria." > NUL 2>&1
IF %ERRORLEVEL% EQU 0 (
netsh advfirewall firewall add rule name= "Open Port 80-90" dir=in action=allow protocol=TCP localport=80-90
) ELSE (
ECHO Rule already exists
)
应该很漂亮self-explanatory。 %ERRORLEVEL%
在这种情况下正在捕获 findstr
的 errorlevel
,如果找到指定的字符串,它将是 0
。
netsh advfirewall firewall show rule name="Open Port 80-90" > NUL 2>&1
IF ERRORLEVEL 1 (
netsh advfirewall firewall add rule name= "Open Port 80-90" dir=in action=allow protocol=TCP localport=80-90
) ELSE (
ECHO Rule already exists
)
更简单。
如果规则存在,netsh
命令将 errorlevel
设置为 0,否则 non-zero。
我正在尝试创建一个用户只需要 运行 的批处理文件,它会添加一个防火墙规则,该脚本有效,但我想阻止用户创建多个具有相同名称的规则。
我知道如何使用 netsh -contains 检查它,但不确定如何将它转换为批处理脚本。
我现有的脚本
@Echo On
netsh advfirewall firewall add rule name= "Open Port 80-90" dir=in action=allow protocol=TCP localport=80-90
Exit
我想做什么
@Echo On
if netsh advfirewall firewall show rule name="Open Port 80-90" -contains "No rules match the specified criteria."
@Echo On
netsh advfirewall firewall add rule name= "Open Port 80-90" dir=in action=allow protocol=TCP localport=80-90
Exit
应该这样做:
netsh advfirewall firewall show rule name="Open Port 80-90" | findstr /c:"No rules match the specified criteria." > NUL 2>&1
IF %ERRORLEVEL% EQU 0 (
netsh advfirewall firewall add rule name= "Open Port 80-90" dir=in action=allow protocol=TCP localport=80-90
) ELSE (
ECHO Rule already exists
)
应该很漂亮self-explanatory。 %ERRORLEVEL%
在这种情况下正在捕获 findstr
的 errorlevel
,如果找到指定的字符串,它将是 0
。
netsh advfirewall firewall show rule name="Open Port 80-90" > NUL 2>&1
IF ERRORLEVEL 1 (
netsh advfirewall firewall add rule name= "Open Port 80-90" dir=in action=allow protocol=TCP localport=80-90
) ELSE (
ECHO Rule already exists
)
更简单。
如果规则存在,netsh
命令将 errorlevel
设置为 0,否则 non-zero。