2017-03-21 182 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