2015-11-03 5 views
0

Так вот сделка. У меня есть сценарий 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 от сбоя, что является известной проблемой.

+0

«и пробовал около 3 дюжин строк кода» - не могли бы вы показать свою лучшую попытку? :-) –

+0

Java не обрезает данные. Возможно, ваш код может быть. – EJP

+0

Я расширил дерьмо из этого. Посмотрите всю добавленную информацию. – reddragon72

ответ

0

Нет истинного исправления для привинченного способа, который PSexec отправляет на выходе, и PAexec просто ничего не сделал. Итак, теперь я создаю пакетный файл на диске с удаленных систем C и используя psexec, чтобы сообщить удаленной системе выполнить его. Команда ping запускает эхо-сигнал и выводит его в файл в том же каталоге. Затем я использую powershell для синтаксического анализа выходного файла и захвата того, что мне нужно, и удаления файлов.