我正在尝试使用Powershell将Jasperserver安装到Windows VM上。
我可以很好地安装Java,但是一些后续运行的bat文件抱怨他们无法找到环境变量,例如JAVA_HOME。我可以看到它们存在。
我添加了环境变量:
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk1.8.0_91", "Machine")
[Environment]::SetEnvironmentVariable("JRE_HOME", "C:\Program Files\Java\jre1.8.0_91", "Machine")
[Environment]::SetEnvironmentVariable("CLASSPATH", "C:\Program Files\Java\jdk1.8.0_91\jre1.8.0_91\lib\rt.jar", "Machine")
还有路径变量。进入系统 - >高级系统设置 - >环境变量我可以看到它们在那里,所以我认为它不仅仅是设置powershell会话。
当我尝试运行ANT时(虽然是批量生成)
cd C:\ Jaspersoft \ jasperreports-server-6.2.0 \ apache-tomcat \ bin
$ arguments ='/ c service.bat install'
Start-Process cmd -Wait -PassThru -ArgumentList $ arguments
它给了我这个错误:
> WARNING: JAVA_HOME environment variable not found [minimal] Running
> install-minimal-pro Ant task
> ---------------------------------------------------------------------- '"java.exe"' is not recognized as an internal or external command,
> operable program or batch file. Checking Ant return code: OK
我试过了:
如果我重新启动服务器,它将安装正常。另外,如果我直接在命令提示符下运行批处理,那就没关系。
在我必须使用已安装Java的映像之前,我想了解为什么会发生这种情况并且理想情况下才能使其正常工作。
答案 0 :(得分:1)
SetEnvironmentVariable(..., "Machine")
和setx
都在注册表中设置变量。此值用于资源管理器启动的未来进程(例如重新启动后),但不为当前进程或其子进程设置。您的脚本需要为当前进程设置变量。
使用.NET语法:
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk1.8.0_91", "Process")
或者,使用PS语法
$env:JAVA_HOME = "C:\Program Files\Java\jdk1.8.0_91"