哪个 Powershell 函数可以检查本地主机上的某个端口是否处于监听状态?

哪个 Powershell 函数可以检查本地主机上的某个端口是否处于监听状态?

介绍

目的:LISTENING state on localhost使用 PowerShell 函数检查端口是否处于

以下命令:

New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)

结果是:

PS C:\Windows\system32> New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)
At line:1 char:33
+ New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)
+                                 ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

PS C:\Windows\system32>

问题

哪个 PowerShell 函数可用于检查本地主机上的某个端口是否处于监听状态?

答案1

如果你在 Windows 8/Server 2012 或更高版本上使用 PowerShell v3.0+,那么你无需尝试连接到端口来确定状态,只需使用Get-NetTCPConnection

Get-NetTCPConnection -State Listen

对我来说,这更准确,因为它读取的是计算机上端口的状态。如果防火墙或类似的东西挡住了路,使用连接进行测试可能会让它看起来好像没有“侦听”,但实际上它确实在侦听。

答案2

首先创建并存储连接:

$connection = (New-Object Net.Sockets.TcpClient)
$connection.Connect("127.0.0.1",10389)

然后检查是否已连接

if ($connection.Connected) {
    "We're connected"
    }

或者按照 Colyn1337 的建议

Try {
    $connection = (New-Object Net.Sockets.TcpClient)
    $connection.Connect("127.0.0.1",10389)
    "Connected"
    }
Catch {
    "Can't Connect"
    }

答案3

我曾尝试将此添加到技术人员的答案中,因此这是对他的答案的扩展。您可以像这样微调输出:

Get-NetTCPConnection -State Listen | Where-Object {$_.LocalAddress -eq "192.168.56.1" -and $_.LocalPort -eq "139"}

如果它正在监听该端口,它将返回一个数据数组。如果没有监听器,它将返回 null,因此不需要错误处理。

答案4

如果您正在检查端口号是否被占用,则正常情况是 -eq “$null” 不起作用:

例如如果你运行以下命令

$PortNumberOutPut = Get-NetTCPConnection | where Localport -eq $portNumber

您想检查变量是否为空

if (!$PortNumberOutPut) { Write-Host "variable is null" }

如果你想检查 $PortNumberOutPut 是否有除 $null 之外的任何值

if ($PortNumberOutPut) { Write-Host "variable is NOT null" }

相关内容