Как открыть порты брандмауэра Windows через пакетный файл

Есть ли какой-либо способ в пакетном файле открыть определенные порты в Windows через пакетный файл? Было бы неплохо, если бы установщик сделал это для нашего серверного приложения, а не вручную выполнил его.

Ответ 1

Используйте netsh.exe. Очень простой командный файл, который принимает аргумент порта:

@echo off
rem -- open port (first argument passed to batch script)
netsh advfirewall firewall add rule name="Open Port %1" dir=in action=allow protocol=TCP localport=%1 remoteip=10.15.97.0/24,10.17.0.0/16

Ответ 2

Это расширение решения, предоставленное @Кевином Ричардсоном. Обратите внимание: команда "netsh advfirewall add rule" создаст новое правило с тем же именем при каждом запуске одной и той же команды. script ниже помогает предотвратить его

ECHO OFF
set PORT=8081
set RULE_NAME="Open Port %PORT%"

netsh advfirewall firewall show rule name=%RULE_NAME% >nul
if not ERRORLEVEL 1 (
    rem Rule %RULE_NAME% already exists.
    echo Hey, you already got a out rule by that name, you cannot put another one in!
) else (
    echo Rule %RULE_NAME% does not exist. Creating...
    netsh advfirewall firewall add rule name=%RULE_NAME% dir=in action=allow protocol=TCP localport=%PORT%
)