2021-11-07

ORACLE_HOMEを取得するPowerShellワンライナー

(Get-ChildItem -Path HKLM:\SOFTWARE\ORACLE | Where-Object {$_.PSChildName -like "KEY_*"}).GetValue("ORACLE_HOME")

エイリアスを使うと、

(gci HKLM:\SOFTWARE\ORACLE | ? {$_.PSChildName -like "KEY_*"}).GetValue("ORACLE_HOME")

Windows 64-bit に Oracle Client 32-bit をインストールしている場合
(gci HKLM:\SOFTWARE\WOW6432Node\ORACLE | ? {$_.PSChildName -like "KEY_*"}).GetValue("ORACLE_HOME")

レジストリ・パラメータについて

データベース管理者リファレンス for Microsoft Windows によると

レジストリ・パラメータの概要
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_HOMENAMEについて
コンピュータの新規OracleホームにOracle製品をインストールするたびに、HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_HOMENAMEが作成されます。
このサブキーにはほとんどのOracle製品に対するパラメータ値が含まれます
(略)
 ORACLE_HOME
 Oracle製品がインストールされるOracleホーム・ディレクトリを指定します。

とあります。
このレジストリのサブキーの情報は %ORACLE_HOME%\BIN\oracle.key に記載されています。したがって、以下のようにPATH を探索してレジストリのサブキーを取得することもできます。

Get-Content (Join-Path ($Env:Path.Split(';') | ? {($_ -ne "") -and (Test-Path (Join-Path $_  oracle.key))}) oracle.key)

上述のワンライナーでは 簡便なORACLE_HOME というプロパティがあるキーを取得するという方法を採用しています。


`oracle.key` のあるフォルダの一つ上のフォルダが `ORACLE_HOME` ですので、以下のワンライナーでも`ORACLE_HOME` が取得できます。
Split-Path ($Env:Path.Split(';') | ? {($_ -ne "") -and (Test-Path (Join-Path $_  oracle.key))})