所以這裏是交易。我有一個Powershell腳本,它調用psexec來運行從遠程系統到它連接的網絡驅動器的ping測試。這工作正常,ping輸出回滾並且工作得很好。但是當我在Java中運行相同的VIA runtime.exec或processbuilder腳本時,唯一顯示的內容就是第一行的一部分。Java截斷psexec輸出
我一直在閱讀關於這整個錯誤流和輸出流的東西,並嘗試了大約30多行代碼來嘗試和修復此問題。沒有任何工作。
有了,我已決定,也許在運行批處理文件中PSEXEC代碼,並要求從PS1腳本可能工作...笑沒了
所以我現在輸出批次到文件,這是不工作。
所以我的問題是兩個不同的選擇。
1)有沒有人有解決這個問題。正如你所知,一個ping命令大概有11行,我想要的是「Average = ms」。
2)有沒有辦法在從Java調用時將批處理與Java隔離開來,這樣psexec輸出不會被截斷,因爲Java不知道如何不會因錯誤而切斷輸出。
根據要求,我正在使用的代碼。 這拉在輸出從一個的powershell腳本
Runtime runtime = Runtime.getRuntime();
Process proc;
proc = runtime.exec("powershell \\\\[computer]\\c$\\" + Main.setDirectoriesForScriptsAndLogs + "\\scripts\\TPCAuto.ps1 " + pcname + " " + ticket + " " + usid + " " + Main.GUIver);
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
Main.txtUpdates.setText("Gathering performance data");
AllUpdates.allUpdates.setText("Gathering performance data");
while ((line = reader.readLine()) != null){
//listens for key markers from the powershell script and displays the output to a JTestField or JTestPane
}
reader.close();
proc.getOutputStream().close();
Thread.currentThread().interrupt();
return;
這是簡化的powershell腳本
[string]$Hostname = $args[0]
[string]$HdriveA = $args[1]
$GetDFSSplit= ""
$DFS = ""
$HomeDrivedropped = $HdriveA -replace ".{8}$"
$FindDFS = \\[computer]\c$\SDS\Extra\dfsutil.exe link $HomeDrivedropped
$GetDFSSplit = $FindDFS.Split("\") | select
[String]$DFS = $GetDFSSplit[5]
write-host ". 2 @ DFS Host = $DFS"
$PingH = "ping $DFS"
$testingagain = \\[computer]\c$\SDS\Extra\psexec\psexec.exe -d \\$Hostname -s cmd /c ping $DFS > c:\temp\output.txt
write-host ". 5 @ $testingagain" <-- this is feeding to Java so it knows where to display the output
輸出時我手動送入的腳本和手動運行它(未通過Java )注意:powershell_ISE和Powershell控制檯都顯示此結果爲
以32字節數據Ping server.being.pinged [IP.of.Server]: IP.of.Server回覆:bytes = 32時間< 1ms TTL = 251 IP.of.Server的回覆:bytes = 32時間< 1ms的TTL = 251 從IP.of.Server答覆:字節= 32時間< 1ms的TTL = 251 從IP.of.Server答覆:字節= 32時間< 1ms的TTL = 251
平統計對於IP.of.Server: 分組:發送= 4,收到= 4,丟失= 0(0%丟失), 以毫秒爲單位的近似往返時間: 最小= 0ms,最大= 0ms,平均= 0ms
輸出腳本的當與手動和爪哇飼料投入運行通過Java
ping命令server.being.pinged [IP.of.Server]
這發生在我將結果提供給Java或將其提供給txt文件。我厭倦了從sysinternals網站以及其他人那裏可以找到的所有內容,並且總體上的共識似乎已經破裂,但我嚴重懷疑這一點。
哦,讓我加入這個爲樂趣我試圖運行一個批處理文件與args創建從PowerShell的TXT,仍然得到相同的回報。因爲所有進入我的Java代碼的東西都會打印出JTextField和Pane,而且有一些輸出較長,所以我完全失敗了。
另請注意,我甚至暫停了我的Java代碼和PowerShell腳本,認爲psexec在結束之前無法完成。不知道我做對了。而2> null使Java不會崩潰,這是一個已知問題。
「並嘗試了大約三十行代碼」 - 您能否展示您的最佳嘗試? :-) –
Java不會截斷數據。你的代碼可能可能會。 – EJP
我擴大了這個垃圾。請參閱所有添加的信息。 – reddragon72