Obtención de datos del Registro

Puede obtener o modificar los datos del Registro mediante la clase StdRegProv de WMI y sus métodos. Al usar la utilidad Regedit para ver y cambiar los valores del Registro en el equipo local, StdRegProv permite usar un script o una aplicación para automatizar estas actividades en el equipo local y en los equipos remotos.

StdRegProv contiene métodos para hacer lo siguiente:

  • Comprobar los permisos de acceso de un usuario
  • Crear, enumerar y eliminar claves del Registro
  • Crear, enumerar y eliminar subclaves o valores con nombre
  • Leer, escribir y eliminar valores de datos

Los datos del Registro se organizan por subárboles, claves y subclaves anidados en una clave de nivel superior. Los valores de datos reales se denominan entradas o valores con nombre.

Los subárboles incluyen lo siguiente:

  • HKEY_CLASSES_ROOT (abreviado como HKCR)
  • HKEY_CURRENT_USER (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM)
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

Por ejemplo, en la entrada del Registro HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion, el subárbol HKEY es SOFTWARE; las subclaves son Microsoft y DirectX; y la entrada de valor con nombre es InstalledVersion.

Un RegistryKeyChangeEvent se produce cuando se produce un cambio en una clave específica, pero la entrada no identifica cómo cambian los valores ni se desencadenarán estos cambios por debajo de la clave especificada. Para identificar los cambios en cualquier lugar de una estructura de clave jerárquica, use RegistryTreeChangeEvent, que no devuelve valores específicos ni cambios clave que se producen. Para obtener un cambio de valor de entrada específico, use RegistryValueChangeEvent y, después, lea la entrada para obtener un valor de línea base.

StdRegProv solo tiene métodos a los que se puede llamar desde C++ o script, que es diferente de la estructura de la clase Win32.

En el ejemplo de código siguiente se muestra cómo usar el método StdRegProv.EnumKey para enumerar todas las subclaves de software de Microsoft en la clave del Registro.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

$HKEY_LOCAL_MACHINE = 2147483650
$strKeyPath = "SOFTWARE\Microsoft"

$objReg = [WMIClass]"root\default:StdRegProv"

$arrSubKeys = $objReg.EnumKey($HKEY_LOCAL_MACHINE, $strKeyPath)
foreach ($subKey in ($arrSubKeys.sNames))
{
    $subKey
}

StdRegProv tiene diferentes métodos para leer los distintos tipos de datos de valor de entrada del Registro. Si la entrada tiene valores desconocidos, puede llamar a StdRegProv.EnumValues para enumerarlos. En la tabla siguiente se muestra la correspondencia entre los métodos StdRegProv y los tipos de datos.

Método Tipo de datos
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
GetExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

En la tabla siguiente se enumeran los métodos correspondientes para crear nuevas claves o valores, o cambiar las existentes.

Método Tipo de datos
SetBinaryValue REG_BINARY
SetDWORDValue REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

En el ejemplo siguiente se muestra cómo leer la lista de orígenes del registro de eventos del sistema de la clave del Registro.

HKEY_LOCAL_MACHINE\SYSTEM\ Conjunto de controles actual\Servicios\Eventlog\Sistema

Tenga en cuenta que los elementos del valor de varias cadenas se tratan como una colección o matriz.

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ 
    & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

El proveedor del Registro se hospeda en LocalService, no en localSystem. Por lo tanto, no es posible obtener información de forma remota desde el subárbol HKEY_CURRENT_USER. Sin embargo, los scripts que se ejecutan en el equipo local todavía pueden acceder a HKEY_CURRENT_USER. Puede establecer el modelo de hospedaje en LocalSystem en un equipo remoto, pero es un riesgo de seguridad porque el registro de la máquina remota es vulnerable al acceso hostil. Para obtener más información, vea Hospedaje y seguridad del proveedor.

Ejemplos

El ejemplo de código VBScript Leer un valor binario del registro de la Galería TechNet utiliza WMI para leer un valor binario del registro.

Tareas de WMI: Registro