Мне нужно открыть порт в брандмауэре 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, но вы не можете протестировать его так, как вы пытаетесь локально.