从powershell运行jar文件

Akk*_*kki 1 powershell jar execute executable-jar

我想从powershell运行一个jar文件.直到现在我能够找到这个:

Start-Process -FilePath java -ArgumentList '-jar Upload_Download.jar FilePickupPath= $pickuppath FileDownloadPath= $download' -PassThru -RedirectStandardError E:\stderr.txt 
Run Code Online (Sandbox Code Playgroud)

一些如何不起作用.有什么建议?

von*_*ryz 7

Powershell有多个字符串引号字符,其行为方式不同.双引号"允许在字符串中进行评估,而单引号'则不允许.

作为一个实际的例子:

$foo=42
write-host "The foo: $foo"
# Prints The foo: 42
write-host 'The foo: $foo'
# Prints The foo: $foo
Run Code Online (Sandbox Code Playgroud)

该命令使用单引号,(反引号用于将代码拆分为屏幕友好格式)

Start-Process -FilePath java `
-ArgumentList '-jar Upload_Download.jar FilePickupPath= $pickuppath fileDownloadPath= $download' `
-PassThru -RedirectStandardError E:\stderr.txt 
Run Code Online (Sandbox Code Playgroud)

这将通过字面意思$pickuppath$download.其意图可能是通过$pickuppath$download.

要解决此问题,请使用双引号.


Chr*_*lls 5

传递参数通常是一个问题,所以我使用数组,

还可以通过使用参数分散来避免长线。

if(-not $env:JAVA_HOME)
{
    Write-Error "JAVA_HOME not set"
    break
}

$params = @{
    FilePath = [string]::Format("{0}\bin\java.exe",$env:JAVA_HOME)
    WorkingDirectory = "D:\SDL\Web\live\discovery\config\"
    ArgumentList = @("-jar", "discovery-registration.jar", "update")
    RedirectStandardError = "c:\temp\JavaError.txt"
    PassThru = $true
    Wait = $true
}

$p = Start-Process @params

if($p.ExitCode -eq 0)
{
    Write-Output "Discovery Registration complete"
}
else
{
    Write-Output "Discovery Registration failed"
}
Run Code Online (Sandbox Code Playgroud)