2017-12-21 4 views
0

TRUE를 반환 할 때까지 루프를 수행하려면 다음 명령을 1 줄로 간소화하고 싶습니다. TCP 연결이 제대로 작동하는지Powershell에서 텔넷 포트 체크를위한 루프를 얻는 방법은?

다음은 확인합니다 :

(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; } 번으로 쉽게 전화 할 수 있습니다.


이 기능을 좀 더 강력하게 사용해보십시오. 당신은 공백을 제거 할 수 있습니다 라인은 단일 라인으로 그것을 만들 나누기,하지만 난 그것을 읽기 쉽게 포맷 게시합니다 :

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

Im 다음 오류가 다시 발생합니다. –

+0

New-Object : "2"인수가있는 ".ctor"예외가 발생했습니다. 대상 컴퓨터 ac 적극적으로 거부했습니다. 10.10.10.10:212"At line : 1 char : 11 –

+0

아마도 연결이 반환되지 않는 것은 거짓을 반환하지 않지만 오류가 더 많이 발생하고 그 기능이 실패하는 이유입니다. 말할 방법이 있나 : 아무거나 (틀린, 오류) 그러나 진실한, 반복에 들어가기? –

관련 문제