2012-08-30 80 views
2

我试图通过端口进行TCP连接来检查端口是否打开。如何通过不同的端口建立多个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” 参数(S):“无法访问 处置OBJ ECT

虽然我已经给了$ t.close()我仍然面临着。的问题。

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

+1

请注意,您不需要将'Ports'声明为一个字符串,然后将其分割为一个数组。将它声明为一个数组,以便使用 - [[string []] $ Ports',并且调用脚本像'-Ports 443,902,903'或'-Ports'443','902','903'' – latkin

+0

@latkin谢谢buddy 。我在脚本中添加了您的建议更改。现在看起来不错。 – Samselvaprabu

回答

2

按照documentation(MSDN),该Close方法标记为设置在插座,这意味着你不能重复使用相同的实例,需要创建一个NE在尝试连接之前尝试执行实例。将从$t = ...开始的行移动到foreach循环中,您应该没问题。