特定のポートがlocalhostでリッスン状態にあるかどうかを確認できるPowershell機能はどれですか?


4

前書き

目的:LISTENING state on localhost PowerShell関数を使用してポートが入っているかどうかを確認する

次のコマンド:

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>

質問

特定のポートがlocalhostでリッスン状態にあるかどうかを確認するために使用できるPowerShell関数はどれですか?


ローカルマシンのポートがLISTENING状態にあるかどうかを確認しようとしていますか、またはTCPClient.Connectがホストへの接続に失敗したときにエラーをキャッチしようとしていますか?これらは非常に異なるものです。:) PS:ブラケットを追加してみてください。(New-Object Net.Sockets.TcpClient).Connect("127.0.0.1",10389)これにより、操作の順序が変更され、Connectを呼び出す前に新しいソケットオブジェクトがインスタンス化されます。または、変数を使用して2つの個別のコマンドに分割します。
Ƭᴇcʜιᴇ007

質問が更新されました。
030 14年

回答:


8

Windows 8 / Server 2012以降でPowerShell v3.0 +を使用している場合は、ポートに接続して状態を判断する代わりに、次を使用できますGet-NetTCPConnection

Get-NetTCPConnection -State Listen

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


Get-NetTCPConnection –LocalPort 10389Windows8で完璧に動作します。ありがとうございました。
030 14年

2

最初に接続を作成して保存します。

$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"
    }

1
接続が拒否された場合、try / catch / finallyブロックを使用して終了エラーを処理することをお勧めします。
Colyn1337 14年

PS C:\ Windows \ system32> "C:\ path \ to \ file.ps1" Connected PS C:\ Windows \ system32> net stop apacheds apachedsサービスが停止しています。apachedsサービスは正常に停止されました。PS C:\ Windows \ system32> 「C:\ path \ to \ file.ps1」PS C:\ Windows \ system32>に接続できません。ありがとう
030 14年

1

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

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

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


1

Get-NetTCPConnectionのいずれかが私のマシン上で機能した後、私はすべて、賛成票に回答するように設定されました。残念ながら、Powershell 3.0を実行しているWindows 2008サーバーではチェックを実行する必要がありませんでした。

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

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


1

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

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

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

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

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

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

if ($PortNumberOutPut) { Write-Host "variable is NOT null" }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.