如果控制台输出超过4119个字符,则从Java远程运行PowerShell命令会挂起

时间:2015-11-26 08:56:58

标签: java powershell

从Java运行以下命令:

powershell.exe -Command "& {$SecurePassword = ConvertTo-SecureString -AsPlainText $env:remotePass -Force; $Credentials = New-Object System.Management.Automation.PSCredential $env:remoteUser, $SecurePassword; $remoteSession = New-PSSession -ComputerName $env:targetComputerName -Credential $Credentials; Invoke-Command -Session $remoteSession -ScriptBlock {C:\temp\dummy.ps1};}"

挂起在Java端,以防远程服务器上的dummy.ps1输出超过4119个字符。 更好的说,它在远程机器上终止良好,但不知何故,对于更长的输出,终止字符不会到达呼叫者。如果当然有一些终止角色,但无论如何这是我最好的猜测。

从控制台执行相同操作没有问题。

字符数限制接近4K,但超过它。所以一开始听起来很有希望。

有没有人有这种现象的经验,或对瓶颈有任何想法?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可能遇到填充缓冲区问题。执行runtime.exec时,需要使用控制台应用程序将填充的缓冲区。当缓冲区已满时,进程将挂起。

在这篇优秀文章中看到“为什么Runtime.exec()挂起”: http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html

或者看看这里 Capturing stdout when calling Runtime.exec