2017-11-15 9 views
1

一部のJavaサーバーコードと通信するPowershellスクリプトを作成しようとしています。スクリプトは以下の関数を呼び出してサーバーと通信し、現在サーバーは受信したメッセージを出力しています。スクリプトで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." 
    } 
} 

私がれるtcpClientを閉じる前に、私はwhileループを持っていない場合は、メッセージがサーバーに送信され、サーバは問題なく、それを出力します。しかし、whileループを追加すると、whileループが終了するまで、スクリプトは実際にはサーバーコードにメッセージを送信しません。 whileループが終了する前に、行を取得する方法はありますか?

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

が実行されます。理由はありますか?Powershellは、whileループの前に正しい順序でこれらの文を実行していませんか?

答えて

0

Powershellがこのように動作する原因はまだ分かりません。誰もが同じような問題を抱えている場合は、whileループをそれ自身の関数に引っ張り出し、それを問題なしに呼び出すことでこれを回避しました。

関連する問題