Назад | Перейти на главную страницу

PowerShell: как открыть порт брандмауэра Windows

Мне нужно открыть порт в брандмауэре Windows с помощью PowerShell, поэтому я делаю

netsh advfirewall firewall add rule name = "Open port 4443 test" dir=in action=allow protocol=TCP localport=4443

а потом

Test-NetConnection -Port 4443 -ComputerName localhost

чтобы проверить, открыт ли порт, но все еще закрыт.

Поэтому я пытаюсь использовать другую команду:

New-NetFirewallRule -DisplayName "Allow inbound TCP port 4443" -Direction inbound -LocalPort 4443 -Protocol TCP -Action Allow

но все равно без радости.

Итак, вопрос: как открыть порт 4443 через PowerShell?

РЕДАКТИРОВАТЬ: Правило создается в брандмауэре Windows, но мне нужна команда, которая вернет мне ответ проверки True / False.

Чтобы ответить на ваш вопрос в комментариях: чтобы создать сценарий PowerShell, который вернет вас, если порт открыт или нет, поэтому мне нужно получить положительный / отрицательный ответ от PowerShell

Возможно, это поможет вам, используйте System.Net.Sockets.TcpClient класс, чтобы проверить, открыт ли порт или закрыт. Взгляните на следующий код:

$ErrorActionPreference = "silentlycontinue"

$tcp = New-Object System.Net.Sockets.TcpClient
$tcp.Connect("localhost","1234")
$tcp.Connected 

$tcp.connected вернется true если соединение прошло успешно. False если не получится. В $ErrorActionPreference = "silentlycontinue" переменная подавляет сообщения об ошибках.

Пример:

Test-NetConnection всегда будет возвращать «False» для порта localhost. Воспользуйтесь другим инструментом (как canyouseeme.org), если вы проверяете, открыт ли порт с удаленного адреса.

Ваш Powershell выглядит нормально, и вы должны увидеть правило, если посмотрите в графический интерфейс правил брандмауэра Windows, но вы не можете протестировать его так, как вы пытаетесь локально.