调用 java 个命令行应用程序

Calling java command line applications

所以我有以下命令 运行s java 从命令行应用程序并产生一堆输出。

java -jar client.jar --server test7.contoso.com --alternativeemailaddress fred1@contoso.com --organisation contoso --emailaddress fred@contoso.com --data1 1234 --Password1 123456 --data2 1234 --Password2 1234

我正在尝试从 PowerShell 中 运行 并将输出捕获到变量以供进一步处理。

到目前为止,我已经找到了 100 多种不同的方法,但是 none 确实效果特别好。

有没有最好的practice/convention如何做到这一点?

参见:https://blogs.technet.microsoft.com/josebda/2012/03/03/using-windows-powershell-to-run-old-command-line-tools-and-their-weirdest-parameters/ 对于使用 PowerShell

执行 "legacy" 命令的多种方法

您需要包含一个 .exe。 新的 V3+ 推荐方法是使用 --% 告诉 PowerShell 不要解析剩余的参数

PS> java.exe --% -jar client.jar --server test7.contoso.com --alternativeemailaddress fred1@contoso.com --organisation contoso --emailaddress fred@contoso.com --data1 1234 --Password1 123456 --data2 1234 --Password2 1234

好的,所以我解决了。这就是我的选择。

$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