2012-08-30 79 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循環中,您應該沒問題。