web-dev-qa-db-ja.com

特定のポートがローカルホストでLISTENING状態にあるかどうかを確認できるPowershell関数はどれですか?

はじめに

Aim: PowerShell関数を使用して、ポートが_LISTENING state on localhost_にあるかどうかを確認します

次のコマンド:

New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)

結果:

_PS C:\Windows\system32> New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)
At line:1 char:33
+ New-Object Net.Sockets.TcpClient.Connect("127.0.0.1",10389)
+                                 ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

PS C:\Windows\system32>
_

質問

特定のポートがローカルホストでLISTENING状態にあるかどうかを確認するために使用できるPowerShell関数はどれですか?

4
030

Windows 8/Server2012以降でPowerShellv3.0 +を使用している場合は、ポートに接続して状態を確認する代わりに、 Get-NetTCPConnection

Get-NetTCPConnection -State Listen

私にとって、これはコンピューターのポートのステータスを読み取るため、より正確です。接続を使用してテストすると、ファイアウォールなどが邪魔になった場合に、「リッスン」していないように見える可能性があります。

8

まず、接続を作成して保存します。

$connection = (New-Object Net.Sockets.TcpClient)
$connection.Connect("127.0.0.1",10389)

次に、接続されているかどうかを確認します

if ($connection.Connected) {
    "We're connected"
    }

またはColyn1337によって提案されたように

Try {
    $connection = (New-Object Net.Sockets.TcpClient)
    $connection.Connect("127.0.0.1",10389)
    "Connected"
    }
Catch {
    "Can't Connect"
    }
2
Tim Ferrill

get-NetTCPConnectionの回答のいずれかが私のマシンで機能した後、賛成票を投じる準備が整いました。残念ながら、チェックを実行する必要のあるPowershell3.0を実行しているWindows2008サーバーでは機能しませんでした。

ただし、以下は完全に機能しました

([Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties()).GetActiveTcpListeners() | Where Port -EQ 10389

1
rob

ポート番号が占有されているかどうかを確認している場合、-eq“ $ null”が機能しない場合は正常です。

たとえば、次のコマンドを実行している場合

$PortNumberOutPut = Get-NetTCPConnection | where Localport -eq $portNumber

変数がnullかどうかを確認したい

if (!$PortNumberOutPut) { Write-Host "variable is null" }

また、$ PortNumberOutPutに$ null以外の値があるかどうかを確認する場合

if ($PortNumberOutPut) { Write-Host "variable is NOT null" }
1
Rudresh Bhatt

私はこれを技術者の答えに追加しようとしたので、これは彼の拡張です。次のように出力を微調整できます。

Get-NetTCPConnection -State Listen | Where-Object {$_.LocalAddress -eq "192.168.56.1" -and $_.LocalPort -eq "139"}

そのポートでリッスンしている場合は、データの配列が返されます。リスナーがない場合はnullを返すため、エラー処理は必要ありません。

1
Colyn1337