Я - сторонник в таких случаях делать обёртки на будущее 

В отдельном файле - расширяемая библиотека на тему:
// Конструктор объекта метода COM-объекта WMI.
function WMIMethod(wmiObject, methodName) {
  // Атрибуты объекта.
  // Экземпляр метода.
  var _method;
  // Экземпляр коллекции входных параметров.
  var _inputParameters;
  // Экземпляр коллекции выходных параметров.
  var _outputParameters;
  // Методы объекта.
  // Коллекция выходных параметров.
  this.getOutputParameters = function() {
    return _outputParameters;
  }
  // Коллекция входных параметров.
  this.getInputParameters = function() {
    return _inputParameters;
  }
  // Установка значений входных параметров.
  this.setInputParameters = function(parameters) {
    for(key in parameters) {
      eval("_inputParameters." + key + " = parameters[key]");
    }
  }
  // Исполнение.
  this.execute = function() {
    _outputParameters = wmiObject.ExecMethod_(_method.Name, _inputParameters);
  }
  
  // Инициализация.
  _method = wmiObject.Methods_.Item(methodName);
  _inputParameters = _method.InParameters.SpawnInstance_();
  _outputParameters = null;
}
// Конструктор объекта для работы с реестром.
// Константы.
// Корень локальной машины.
Registry.prototype.HKLM = 0x80000002;
// Типы значений.
Registry.prototype.REG_SZ = 1;
Registry.prototype.REG_EXPAND_SZ = 2;
Registry.prototype.REG_BINARY = 3;
Registry.prototype.REG_DWORD = 4;
Registry.prototype.REG_MULTI_SZ = 7;
function Registry() {
  // Атрибуты объекта.
  // COM-объект - WMI провайдер реестра.
  var _registryProvider = null;
  // Методы объекта.
  // Возвращает непосредственные ключи указанной ветви дерева.
  this.getSubKeys = function(rootKey, keyPath) {
    var keys = new Array();
    var enumKeys = new WMIMethod(_registryProvider, "EnumKey");
    enumKeys.setInputParameters({ hDefKey: rootKey, sSubKeyName: keyPath });
    enumKeys.execute();
    with(enumKeys.getOutputParameters()) {
      if(sNames != null) {
        keys = sNames.toArray();
      }
    }
    return keys;
  }
  // Возвращает значения ключа указанной ветви дерева.
  this.getValues = function(rootKey, keyPath, valueName) {
    var result = new Array();
    var valuesNames, valuesTypes;
    var enumValues = new WMIMethod(_registryProvider, "EnumValues");
    enumValues.setInputParameters({ hDefKey: rootKey, sSubKeyName: keyPath });
    enumValues.execute();
    with(enumValues.getOutputParameters()) {
      if(sNames != null && Types != null) {
        valuesNames = sNames.toArray();
        valuesTypes = Types.toArray();
        for(var i = 0; i < valuesNames.length; ++i) {
          result.push({ name: valuesNames[i], type: valuesTypes[i] });
        }
      }
    }
    return result;
  }
  // Возвращает значение из ключа.
  this.read = function(rootKey, keyPath, valueName) {
    var values = this.getValues(rootKey, keyPath);
    var valueType = null;
    for(i in values) {
      if(values[i].name == valueName) {
        valueType = values[i].type;
        break;
      }
    }
    var getMethodName = "";
    switch(valueType) {
      case Registry.prototype.REG_SZ:
        getMethodName = "GetStringValue";
        break;
      case Registry.prototype.REG_EXPAND_SZ:
        getMethodName = "GetExpandedStringValue";
        break;
      case Registry.prototype.REG_BINARY:
        getMethodName = "GetBinaryValue";
        break;
      case Registry.prototype.REG_DWORD:
        getMethodName = "GetDWORDValue";
        break;
      case Registry.prototype.REG_MULTI_SZ:
        getMethodName = "GetMultiStringValue";
        break;
    }
    var get = new WMIMethod(_registryProvider, getMethodName);
    get.setInputParameters({ hDefKey: rootKey, sSubKeyName: keyPath, sValueName: valueName });
    get.execute();
    with(get.getOutputParameters()) {
      switch(valueType) {
        case Registry.prototype.REG_SZ:
        case Registry.prototype.REG_EXPAND_SZ:
          return sValue;
        case Registry.prototype.REG_BINARY:
          return uValue.toArray();
        case Registry.prototype.REG_DWORD:
          return uValue;
        case Registry.prototype.REG_MULTI_SZ:
          return sValue.toArray();
      }
    }
  }
  // Вспомогательные функции.
  function _createRegistryProvider() {
    var locator = new ActiveXObject("WbemScripting.SWbemLocator");
    var connection = locator.ConnectServer(null, "root\\default");
    return connection.Get("StdRegProv");
  }
  // Инициализация
  _registryProvider = _createRegistryProvider();
}
В другом файле - использование для решения конкретной задачи.
<job id="RegistryTest">
  <script language="JScript" src="registry.js"/>
  <script language="JScript">
    var registry = new Registry();
    WScript.Echo(registry.read(Registry.prototype.HKLM, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion", "CommonFilesDir"));
    WScript.Echo();
    var subKeys = registry.getSubKeys(Registry.prototype.HKLM, "SOFTWARE\\Microsoft");
    for(i in subKeys) {
      WScript.Echo(subKeys[i]);
    }
  </script>
</job>
Соответственно, написанное 
baldr начинает выглядеть примерно как (не отлаживал):
<job id="RegistryTest">
  <script language="JScript" src="registry.js"/>
  <script language="JScript">
    var registry = new Registry();
    var rootPath = "SOFTWARE\\Oracle";
    var subKeys = registry.getSubKeys(Registry.prototype.HKLM, rootPath);
    for(var i in subKeys) {
      var subKey = rootPath + "\\" + subKeys[i];
      var values = registry.getValues(Registry.prototype.HKLM, subKey);
      for(var j in values) {
        var searchName = "ORACLE_HOME";
        if(values[j].name == searchName) {
          WScript.Echo(registry.read(Registry.prototype.HKLM, subKey, searchName));
          WScript.Quit();
        }
      }
    }
  </script>
</job>
P.S. В коде нет проверок на ошибки - желающие добавят сами.