从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,但超过它。所以一开始听起来很有希望。
有没有人有这种现象的经验,或对瓶颈有任何想法?
提前谢谢!
答案 0 :(得分:1)
您可能遇到填充缓冲区问题。执行runtime.exec时,需要使用控制台应用程序将填充的缓冲区。当缓冲区已满时,进程将挂起。
在这篇优秀文章中看到“为什么Runtime.exec()挂起”: http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html