我尝试通过端口建立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”参数调用“Connect”的异常:“无法访问a 处置对象。
虽然我已经给了$ t.close()。我仍然面临这个问题。
有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
根据documentation(MSDN),Close
方法将套接字标记为已置位。这意味着您无法重用相同的实例,并且需要在尝试连接之前创建新的TcpClient
实例。将以$t = ...
开头的行移动到foreach循环中,您应该没问题。