2017-03-21 243 views
-1

所以我有以下命令從命令行運行java應用程序並生成一堆輸出。調用java命令行應用程序

java -jar client.jar --server test7.contoso.com --alternativeemailaddress [email protected] --organisation contoso --emailaddress [email protected] --data1 1234 --Password1 123456 --data2 1234 --Password2 1234 

我想從PowerShell中運行此並捕獲輸出到一個變量進一步處理。

到目前爲止,我已經找到了100種不同的方式來做到這一點,但沒有一個真的有效。

是否有任何最佳實踐/慣例如何完成這項工作?

+3

這有什麼Java-Y嗎?好像這個問題真的是「我如何從PowerShell中的程序捕獲輸出」,對嗎?無論如何,你不應該說你已經找到了幾百種不適合你的方式,你應該描述什麼_specifically_在這些方式中不起作用。否則,我們可以給你的最好的描述就是你要做什麼的高級描述,這可能是你嘗試過的100多種方法之一。 – yshavit

+0

100種不同的方式.....小心地顯示_一個沒有和你得到的任何錯誤,所以我們可以幫助解釋出了什麼問題? – Matt

回答

1

參見:https://blogs.technet.microsoft.com/josebda/2012/03/03/using-windows-powershell-to-run-old-command-line-tools-and-their-weirdest-parameters/ 對於很多方式來執行「遺產」使用PowerShell

命令您需要包括.exe文件的一個。 新V3 +推薦的方式是使用 - %來告訴PowerShell將無法解析其餘參數

PS> java.exe --% -jar client.jar --server test7.contoso.com --alternativeemailaddress [email protected] --organisation contoso --emailaddress [email protected] --data1 1234 --Password1 123456 --data2 1234 --Password2 1234 
+0

是的,似乎沒有什麼意義。這看起來很有希望,我會閱讀這篇文章並嘗試你的例子。非常感謝 – user1513388

+0

請記住,PowerShell是一個基於對象的系統,所有傳統或跨平臺命令行工具都是基於文本的,所以序列化就像在C#或Java @ user1513388中一樣 – Novaterata

0

行,所以我的工作了。這是我一起去的。

$params = @{ 'jar'='C:\client\client.jar'; 
      'param1'='data1' 
      'param2'='data2' 
      'param3'='data3' 
      'param4'='data4' 
      'param5'='data5' 
      'param6'='data6' 
      'param7'='data7' 
      'param8'='data8' 
      'param9'='data9' 
      'param10'='data10' 
      'error_log'='C:\tmp\error_log.txt' 
      } 

$data = & 'C:\Program Files\java\jdk1.8.0_121\bin\java.exe' -jar $params.'jar' ` 
      --param1 $params.param1 ` 
      --param2 $params.param2 ` 
      --param3 $params.param3 ` 
      --param4 $params.param4 ` 
      --param5 $params.param5 ` 
      --param6 $params.param6 ` 
      --param7 $params.param7 ` 
      --param8 $params.param8 ` 
      --param9 $params.param9 ` 
      --param10 $params.param10 ` 
      2>$params.error_log