我需要使用 PowerShell 打开 Windows 防火墙上的端口,所以我这样做
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
但还是没有快乐。
所以问题是:如何通过 PowerShell 打开端口 4443?
编辑:该规则已在 Windows 防火墙中创建,但我需要一个返回 True/False 检查响应的命令
答案1
在评论中回答你的问题: 编写一个 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"
变量将隐藏错误消息。
例子:
答案2
Test-NetConnection 将始终对本地主机端口返回“False”。使用另一个工具(比如 canyouseeme.org)如果您正在检查某个端口是否从远程地址打开。
您的 Powershell 看起来很好,如果您查看 Windows 防火墙规则 GUI,您应该会看到该规则,但您无法按照在本地尝试的方式对其进行测试。