【问题标题】:Call jar file from Powershell and process return value从 Powershell 调用 jar 文件并处理返回值
【发布时间】:2013-05-20 01:21:21
【问题描述】:

我有以下情况:
1. 我有一个 Powershell 脚本 foo.ps1
2. 在这个脚本中,我想调用 bar.jar
3. Bar.jar 对 Oracle DB 运行查询
4. 查询的结果应该传回 foo.ps1

我使用 jar 进行 DB 调用的原因是因为我安装了 32 位 Oracle 库,但是我无法强制 Powershell 在 32 位模式下运行。我已经尝试过像
How to execute powershell script in 64 bit machine?
这样的解决方案 但是,尽管它在控制台中显示它切换到 32 位模式,但我仍然收到异常“尝试加载 Oracle 客户端库引发 BadImageFormatException。在安装了 32 位 Oracle 客户端组件的 64 位模式下运行时会出现此问题。”

干杯!

【问题讨论】:

  • 您正在运行的 powershell 版本无关紧要,因为它只是启动 java 可执行文件。您确定要启动 32 位版本的 java 吗?

标签: java powershell x86


【解决方案1】:

我从 32 位 PowerShell 控制台使用了 32 位 ODAC 库。

[System.Reflection.Assembly]::LoadWithPartialName('Oracle.DataAccess')

使用上述行导入后,您可以创建 Oracle 对象并连接到数据库并运行查询。

您也可以在 32 位后台作业中运行它。

Start-Job -ScriptBlock $oracle_script_block -RunAs32 | Wait-Job | Receive-Job

如果您仍想使用 Java 代码,可以这样运行:

$output = & java.exe -jar <oracle JAR>
Write-Host "Exit code: $LASTEXITCODE"
Write-Host "Output: $output"

正如 zdan 指出的,确保 java.exe 是 32 位的。

& java.exe -version

【讨论】:

  • 非常感谢!只是想知道,如何使用 start-job 来调用我的脚本中的函数 runQuery($myQuery)?
  • @Brent 您必须将要在作业中运行的代码放在脚本块或外部脚本文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 2014-12-31
  • 2011-10-07
  • 1970-01-01
  • 2015-02-07
相关资源
最近更新 更多