使用powershell运行java-jar

使用powershell运行java-jar,java,powershell,Java,Powershell,啊,地狱 好的,我已经读了很多其他的答案,但是没有一个有效 我想要做的是有一个powershell脚本,它将打开一个jar或打开一个带有参数的jar。这应该很简单,但我无法用Microsoft的powershell文档轻松找到正确的方法 runprogram.ps1 #Pseudocode $PathToApp = "C:\App" IF $PathToApp exist THEN IF no additional argument THEN goto P

啊,地狱

好的,我已经读了很多其他的答案,但是没有一个有效

我想要做的是有一个powershell脚本,它将打开一个jar或打开一个带有参数的jar。这应该很简单,但我无法用Microsoft的powershell文档轻松找到正确的方法

runprogram.ps1

#Pseudocode
$PathToApp = "C:\App"

IF $PathToApp exist THEN
   IF no additional argument THEN
      goto PathToApp
      Start-Process java -jar app.jar
   ELSE IF additional argument THEN
      goto PathToApp
      Start-Process java -jar app.jar $arg 
   ENDIF

ELSE
  print("Error path to app not set...")
ENDIF


然后我应该能够编写./runprogram.ps1或./runprogram.ps1 file.txt

根据其他stackoverflow帖子,我相信一个简单的答案不仅会帮助我自己,也会帮助很多其他人

谢谢你的阅读。即使你没有提供一个简单的方法,你能给我指出一些类似的例子吗,我可以一起和平相处。因为我和我确信其他人发现学习做这样一个简单的任务powershell很麻烦

编辑:以防将来有人发现这篇文章,这是我做的

param(
  [string]$OpenFile
)
$AppPath = "C:\App.jar"
#Check if path exist
if (-not(Test-Path $AppPath)) {
  write-error "Path to app not found..."
} else {
  if(-not($OpenFile)) {
    Start-Process -FilePath java.exe -ArgumentList "-jar $AppPath"
  } else {
    Start-Process -FilePath java.exe -ArgumentList "-jar $AppPath $OpenFile"
  }
}



我希望这对其他人有所帮助。

选项1[使用开始作业脚本块]

Start-Job -ScriptBlock {
  & java -cp .\Runner.jar com.abc.bcd.Runner.java >console.out 2>console.err
}
if ( $? == "True")
   write-host("Agent started successfully")
else if ($? == "False")
   write-host("Agent did not start")
Start-Process -FilePath '.\jre\bin\java' -WindowStyle Hidden -Wait -ArgumentList "-cp .\Runner.jar com.abc.bcd.Runner"
选项2[使用启动流程]

Start-Job -ScriptBlock {
  & java -cp .\Runner.jar com.abc.bcd.Runner.java >console.out 2>console.err
}
if ( $? == "True")
   write-host("Agent started successfully")
else if ($? == "False")
   write-host("Agent did not start")
Start-Process -FilePath '.\jre\bin\java' -WindowStyle Hidden -Wait -ArgumentList "-cp .\Runner.jar com.abc.bcd.Runner"
这就是我最初使用上述两个选项的方式

选项3[使用apache commons守护程序]

Start-Job -ScriptBlock {
  & java -cp .\Runner.jar com.abc.bcd.Runner.java >console.out 2>console.err
}
if ( $? == "True")
   write-host("Agent started successfully")
else if ($? == "False")
   write-host("Agent did not start")
Start-Process -FilePath '.\jre\bin\java' -WindowStyle Hidden -Wait -ArgumentList "-cp .\Runner.jar com.abc.bcd.Runner"
我可以提出一个更好、更可靠的替代方案

您可以使用
apachecommons守护程序
库为
java应用程序
构建一个
windows服务
,然后非常方便地启动、停止该服务

有一段令人惊叹的youtube视频将解释apache commons守护程序以及如何构建windows服务。我会在最后附上参考资料

参考文献:


如果您还需要apache commons daemon windows服务的所有步骤,请告诉我。

我认为这篇文章对于如何从Powershell向
java.exe
传递参数有一个很好的答案:我想您试过&java-jar$argsclose了吗。。。