如何在使用批处理脚本和 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% 在这种情况下正在捕获 findstrerrorlevel,如果找到指定的字符串,它将是 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。