2013-05-20 63 views
1

我有以下情形:
1.我有一个PowerShell脚本foo.ps1
2.在这个剧本,我想打电话给bar.jar
3.酒吧.jar对Oracle数据库运行查询
4.该查询的结果应传递回foo.ps1呼叫jar文件

我之所以有jar来执行数据库调用是因为我有32位安装Oracle库后,我无法强制Powershell以32位模式运行。我已经尝试过这样的解决方案,如
How to execute powershell script in 64 bit machine?
尽管它在控制台中表示它切换到32位模式,但我仍然遇到异常“尝试加载Oracle客户端库时抛出BadImageFormatException。在64位模式下运行时会发生此问题安装了32位Oracle客户端组件。“

干杯!

+0

您正在运行的powershell版本应该没关系,因为它只是启动java可执行文件。你确定你正在启动32位版本的Java吗? – zdan

回答

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 
+0

非常感谢! 只是想知道,我如何使用start-job来调用函数runQuery($ myQuery),它在我的脚本中? –

+0

@Brent您必须将您想要在代码中运行的代码放在scriptblock或外部脚本文件中。 –