2013-05-20 62 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或外部腳本文件中。 –