2017-11-15 9 views
1

일부 java 서버 코드와 통신하는 Powershell 스크립트를 작성하려고합니다. 스크립트는 서버와 통신하기 위해 다음 함수를 호출하고 현재 서버는받은 메시지를 인쇄하고 있습니다. 나는하여 TcpClient를 닫기 전에 내가 while 루프가없는 스크립트에서 While 루프를 추가 한 후 Powershell 스크립트 코드 실행 문제가 발생했습니다.

Function Send-StringOverTcp ( 
    [Parameter(Mandatory=$True)][String]$DataToSend, 
    [Parameter(Mandatory=$True)][UInt16]$Port) 
{ 
    Try { 
     $IPAddress = "XX.XXX.XX.X"       #ip of server 
     $IPAddress = [IPAddress]$IPAddress.Trim() 

     $ErrorActionPreference = "Stop" 
     $TCPClient = New-Object Net.Sockets.TcpClient 
     $IPEndpoint = New-Object Net.IPEndPoint($IPAddress, $Port) 
     $TCPClient.Connect($IPEndpoint) 
     Write-Host -ForegroundColor Green "Connection established with 
$IPAddress on port $Port" 

     $NetStream = $TCPClient.GetStream() 
     [Byte[]]$Buffer = [Text.Encoding]::ASCII.GetBytes($DataToSend) 
     $NetStream.Write($Buffer, 0, $Buffer.Length) 
     $NetStream.Flush() 
     Write-Host -ForegroundColor Green "Data sent to server" 

     while($true) { 

     } 

     If ($NetStream) { $NetStream.close() } 
     If ($TCPClient) { $TCPClient.close() } 
    } catch { 
    Write-Error $_.Exception.ToString() 
    Read-Host -Prompt "The above error occurred. Press Enter to exit." 
    } 
} 

이 메시지는 서버와 문제없이 밖으로 서버 인쇄를로 전송됩니다. 그러나 while 루프를 추가 할 때 while 루프가 끝날 때까지 스크립트는 실제로 서버 코드에 메시지를 보내지 않습니다. 줄을 얻을 수있는 방법이 있습니까? while 루프가 끝나기 전에 줄을 얻을 수있는 방법이 있습니까?

$NetStream.Write($Buffer, 0, $Buffer.Length) 
$NetStream.Flush() 

Powershell이 ​​올바른 순서로 while 문 앞에 그 문을 실행하지 않는 이유가 있습니까?

답변

0

Powershell이 ​​이런 식으로 행동하게 만든 이유는 무엇입니까? 누군가가 비슷한 문제를 겪고있는 경우 나는 while 루프를 자신의 함수로 끌어 와서 아무 문제없이 호출함으로써이 문제를 해결했다.