2

我尝试通过端口建立 TCP 连接以检查端口是否打开。

Param (
        [string] $IPAddress,
        $Ports
    )

$t = New-Object Net.Sockets.TcpClient

$PortArray= $Ports -split ","

Foreach ($Port in $PortArray) {

    $t.Connect($Ipaddress,$Port)

    if($t.Connected)
    {
        "Port $Port is operational"
    }
    else
    {
        "Port $Port is Not opened . Request port access via IT support team. "
    }

    $t.Close()  
}

我调用了如下函数。

PS D:\PowerCLi-Scripts> .\Is-PortOpened.ps1 -IPAddress "193.44.35.234" -Port ("443,902,903")

当连接到第二个和第三个端口时,它会抛出如下错误。

使用“2”个参数调用“连接”的异常:“无法访问已处置的对象。

虽然我给了 $t.close()。我仍然面临这个问题。

有人可以帮我解决这个问题吗?

4

1 回答 1

2

根据文档(MSDN),该Close方法将套接字标记为已释放。这意味着您不能重复使用相同的实例,并且需要TcpClient在尝试连接之前创建一个新实例。将开头的行$t = ...移到 foreach 循环中,你应该没问题。

于 2012-08-30T06:19:30.740 回答