【问题标题】:Powershell Scripting Code Execution Issue After Adding a While Loop添加 While 循环后的 Powershell 脚本代码执行问题
【发布时间】:2017-11-15 18:50:49
【问题描述】:

我正在尝试编写一个与一些 java 服务器代码通信的 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 循环完成。有什么办法可以得到线条

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

在while循环结束之前执行。 Powershell 没有在 while 循环之前而不是之后以正确的顺序执行这些语句是否有原因?

【问题讨论】:

    标签: powershell networking scripting


    【解决方案1】:

    我仍然不确定是什么导致 Powershell 以这种方式行事。如果有人遇到类似问题,我只需将 while 循环拉出到它自己的函数中并毫无问题地调用它即可解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2020-02-17
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多