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番目と3番目のポートに接続すると、次のようなエラーが発生します。

「2」引数で「Connect」を呼び出す際の例外:「破棄されたオブジェクトにアクセスできません。

私は$t.close()を与えましたが。私はまだ問題に直面しています。

誰かが私がこれを解決するのを手伝ってもらえますか?

4

1 に答える 1

2

documentation(MSDN)によると、Closeメソッドはソケットを破棄済みとしてマークします。つまり、同じインスタンスを再利用することはできずTcpClient、接続を試みる前に新しいインスタンスを作成する必要があります。で始まる行を$t = ...foreach ループに移動すると、問題ありません。

于 2012-08-30T06:19:30.740 に答える