Так вот сделка. У меня есть сценарий Powershell, который вызывает psexec для запуска теста ping из удаленной системы на подключенный сетевой диск. Это прекрасно работает, и выход ping возвращается и отлично работает. Но когда я запускаю тот же скрипт VIA runtime.exec или processbuilder в Java, единственное, что появляется, является частью первой строки.Java truncating psexec output
Я читал все об этом потоке ошибок и выводил поток материала и пробовал около 3 дюжин строк кода, чтобы исправить это. Ничего не сработало.
С этим я решил, что, возможно выполнение кода Psexec в пакетном файле и вызова, что с ps1 сценарий может работать ... лол Нету
Так что теперь я выводя партию в файл, и это не работает.
Так что мой вопрос - два разных варианта.
1) У кого-нибудь есть обходной путь к этому. Как вы знаете, команда ping имеет около 11 строк, а одна из них - «Средняя = мс».
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
выход, когда я кормлю скрипт вручную и запустить его вручную (не VIA Java) ПРИМЕЧАНИЕ: что в командах powershell_ISE и Powershell показаны как результат
Pinging server.being.pinged [IP.of.Server] с 32 байтами данных: Ответ от IP.of.Server: bytes = 32 раз < 1ms TTL = 251 Ответ с IP.of.Server: bytes = 32 время < 1мс TTL = 251 ответ от IP.of.Server: число байт = 32 время < 1мс TTL = 251 ответ от IP.of.Server: число байт = 32 время < 1мс TTL = 251
статистика Ping для IP.of.Server: Пакеты: Отправлено = 4, Получено = 4, Потеряно = 0 (0% потерь), Приблизительное время прохода в миллисекундах: Минимум = 0мс, Максимум = 0мс, Среднее = 0мс
вывода скрипта при запуске VIA Java с ручными и Java входами подачи
Pinging server.being.pinged [IP.of.Server]
Это происходит, когда Я передаю результаты в Java или передаю их в txt-файл. Я устал от всего, что мог найти на сайте sysinternals, а также на других, и общий консенсус кажется, что это сломано, но я серьезно сомневаюсь в этом.
О, и позвольте мне добавить это для удовольствия. Я попробовал запустить пакетный файл с помощью args, чтобы создать txt из powershell и все равно получить тот же возврат. У меня полная потеря, так как все остальное, входящее в мой Java-код, отлично печатает на JTextField и Pane, и есть некоторые с более длинными выходами.
Также обратите внимание, что я даже остановил свой код Java и скрипты powershell, думая, что psexec не смог закончить, прежде чем он закончился. Не уверен, что я сделал это правильно. И 2> null держит Java от сбоя, что является известной проблемой.
«и пробовал около 3 дюжин строк кода» - не могли бы вы показать свою лучшую попытку? :-) –
Java не обрезает данные. Возможно, ваш код может быть. – EJP
Я расширил дерьмо из этого. Посмотрите всю добавленную информацию. – reddragon72