2015-11-03 77 views
0

所以這裏是交易。我有一個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不會崩潰,這是一個已知問題。

+0

「並嘗試了大約三十行代碼」 - 您能否展示您的最佳嘗試? :-) –

+0

Java不會截斷數據。你的代碼可能可能會。 – EJP

+0

我擴大了這個垃圾。請參閱所有添加的信息。 – reddragon72

回答

0

沒有真正的修復方法,PSexec發送它輸出和PAexec只是沒有做任何事情搞砸了。所以現在我正在遠程系統C盤上創建一個批處理文件,並使用psexec告訴遠程系統執行它。 ping命令運行echo off並輸出到同一目錄中的文件。然後我使用powershell來解析輸出文件,並抓住我想要的然後刪除文件。