2017-12-21 22 views
0

次のコマンドを1行に効率化し、TRUEを返すまでループを実行したいと思います。Powershellの1行でTelnetポートチェックのループを取得するには?

TCP接続が正しく動作している場合には以下がチェックされます:

(New-Object System.Net.Sockets.TcpClient -ArgumentList DESTINATION-IP,PORT).Connected 

をこれは、通常、すべてのファイアウォールのブロッキングがない場合はTRUEを返す/印刷します。

私がしたいことは、スクリプト/ファイルなしで、TRUE値を返すまでこのコマンドをループさせることです。

アイデア?このような

+0

なぜ[nmap](https://nmap.org/)を使用しないのですか?それはちょうどそれを(そしてもっと)行うように設計されています。 – vonPryz

+0

while($ true) '?パワーサルの基本を学ぶだけでどうですか?楽しいこと:最も一般的なスクリプト言語と同じです。 – Clijsters

+0

while((New-Object System.Net.Sockets.TcpClient -ArgumentList DESTINATION-IP、PORT).Connected){} – EBGreen

答えて

1

何かが働くだろう:

while ((New-Object System.Net.Sockets.TcpClient -ArgumentList DESTINATION-IP,PORT).Connected -ne $true) { Start-Sleep -Milliseconds 1000 } 

をあなたが実際に接続洪水にしない限り、私は〜250ミリ秒かそこら未満の睡眠をお勧めしません。

また、スクリプトファイルを使用せずにスクリプトを呼び出すためにワンライナーを作成する必要はありません。 Powershellには、終端記号の末尾に;があります。 powershell -Command { 1; 2; 3; }に簡単に電話することができます。


これはもう少し頑強にしてください。空白と改行を削除して1行にすることはできますが、読みやすくするために書式設定して投稿します:

do { 
    try { 
     $Connected = (New-Object System.Net.Sockets.TcpClient -ArgumentList DESTINATION-IP,PORT -ErrorAction Stop).Connected; 
    } 
    catch { 
     $Connected = $false; 
    } 
    if (!$Connected) { Start-Sleep -Milliseconds 1000; } 
} until ($true.Equals($Connected)); 
+0

今、次のエラーが戻ってきました。 –

+0

New-Object: "2"引数を持つ ".ctor"の呼び出しで例外が発生しました: "ターゲットマシンac 激しく拒否しました。10.10.10.10:212行:1 char:11 –

+0

接続の復帰が許可されていない可能性がありますが、FALSEは返されません。何か言い方があります:何か(偽、誤り)ですが、真、ループに入りますか? –

関連する問題