Compartir a través de


Cambio de los datos del Registro

La clase StdRegProv del Proveedor del Registro del sistema para WMI tiene métodos que hacen lo siguiente:

  • Crear o eliminar claves del Registro.

    Use CreateKey o DeleteKey.

  • Crear o eliminar valores con nombre, que se denominan entradas cuando están bajo claves.

    Use el nombre de un nuevo valor y SetBinaryValue, SetDWORDValue, SetExpandedStringValue, SetMultiStringValue o SetStringValue para crear un valor con nombre. Use DeleteValue para eliminar un valor con nombre.

  • Cambiar valores con nombre.

    Use el nombre de un valor y los métodos Set (identificados en el elemento con viñetas anterior) para cambiar los valores con nombre existentes en una clave. Debe conocer el nombre de un valor para cambiarlo. Si no conoce los nombres de valor de una clave, use el método EnumValues para obtenerlos.

En este tema se describen las secciones siguientes:

Creación de una clave del Registro mediante VBScript

Como el Registro es la base de datos de configuración central para el sistema operativo, las aplicaciones y los servicios, tenga cuidado al escribir cambios en los valores del Registro o eliminar claves.

Nota

No puede supervisar la subclave HKEY_CLASSES_ROOT de HKEY_CURRENT_USER(HKCU). No se recomienda supervisar HKEY_USERS porque las subclaves aparecen y desaparecen a medida que se cargan subárboles.

 

En los ejemplos de código siguientes se muestra cómo crear una clave del Registro y una subclave.

HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

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

strPath = "SOFTWARE\MyKey\MySubKey"

Return = objRegistry.CreateKey(HKEY_LOCAL_MACHINE, strPath)

If Return <> 0 Then
    WScript.Echo "The operation failed." & Err.Number
    WScript.Quit
Else
    wScript.Echo "New registry key created" & VBCRLF & "HKLM\SOFTWARE\MYKey\"

End If

$HKEY_LOCAL_MACHINE = 2147483650 
$strComputer = "."
$strPath = "SOFTWARE\MyKey\MySubKey"

$reg = [wmiclass]"\\$strComputer\root\default:StdRegprov"

[void]$reg.CreateKey($HKEY_LOCAL_MACHINE, $strPath)

Creación de un valor del Registro con nombre mediante PowerShell y VBScript

En el ejemplo de código siguiente se muestra cómo crear un valor con nombre denominado MultiStringValue en la clave HKEY_LOCAL_MACHINE\SOFTWARE\MiClave\MiSubclave que se crea en el script anterior. El script llama a StdRegProv.SetMultiStringValue para escribir valores de cadena en un nuevo valor con nombre.

const HKEY_LOCAL_MACHINE = &H80000002 
strComputer = "."

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

strKeyPath = "SOFTWARE\MyKey\MySubKey"
strValueName = "MultiStringValue"
arrStringValues = Array("one", "two","three", "four")

objRegistry.SetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath,_
    strValueName, arrStringValues

' Read the values that were just written
objRegistry.GetMultiStringValue HKEY_LOCAL_MACHINE, strKeyPath,_
    strValueName, arrStringValues   

For Each strValue in arrStringValues
    WScript.Echo strValue 
Next

$HKEY_LOCAL_MACHINE = 2147483650 
$strComputer = "."
$strPath = "SOFTWARE\MyKey\MySubKey"

$strValueName = "MultiStringValue"
$arrStringValues = @("one", "two","three", "four")

$reg = [wmiclass]"\\$strComputer\root\default:StdRegprov"

[void]$reg.SetMultiStringValue($HKEY_LOCAL_MACHINE, $strKeyPath, $strValueName, $arrStringValues)

$multiValues = $reg.GetMultiStringValue($HKEY_LOCAL_MACHINE, $strKeyPath, $strValueName)
$multiValues.sValue

Con WMI, no se puede establecer la seguridad de acceso en una clave del Registro. Pero el método StdRegProv.CheckAccess compara la configuración de seguridad del usuario actual con el descriptor de seguridad de una clave del Registro para determinar si el usuario tiene un permiso específico, como KEY_SET_VALUE.