Tareas WMI: registro

Tareas de WMI para el registro crear y modificar claves y valores del registro. Para ver otros ejemplos, vea el ScriptCenter de TechNet en https://www.microsoft.com/technet .

Los ejemplos de scripts que se muestran en este tema obtienen datos solo del equipo local. Para obtener más información acerca de cómo usar el script para obtener datos de equipos remotos, consulte conexión a WMI en un equipo remoto.

En el procedimiento siguiente se describe cómo ejecutar un script.

Para ejecutar un script

  1. Copie el código y guárdelo en un archivo con la extensión. vbs, como filename.vbs. Asegúrese de que el editor de texto no agrega una extensión. txt al archivo.
  2. Abra una ventana del símbolo del sistema y navegue hasta el directorio en el que guardó el archivo.
  3. Escriba cscript filename.vbs en el símbolo del sistema.
  4. Si no puede obtener acceso a un registro de eventos, compruebe si está ejecutando desde un símbolo del sistema con privilegios elevados. Algunos registros de eventos, como el registro de eventos de seguridad, pueden estar protegidos por controles de acceso de usuario (UAC).

Nota

De forma predeterminada, cscript muestra la salida de un script en la ventana del símbolo del sistema. Dado que los scripts de WMI pueden generar grandes cantidades de resultados, es posible que desee redirigir la salida a un archivo. Escriba cscript filename.vbs > outfile.txt en el símbolo del sistema para redirigir la salida del script de filename.vbs a outfile.txt.

En la tabla siguiente se enumeran ejemplos de scripts que se pueden usar para obtener distintos tipos de datos del equipo local.

Cómo... Clases o métodos WMI
... ¿leer los valores de clave del registro mediante WMI? Use la clase StdRegProv , que se encuentra en el espacio de nombres root\default. No puede obtener ninguna instancia de esta clase porque el proveedor del registro del sistema es solo un método y un proveedor de eventos. Sin embargo, puede obtener datos del registro a través de métodos como EnumKey o EnumValue. El Win32_Registry, que se encuentra en el espacio de nombres root\cimv2, obtiene datos sobre el registro en su conjunto, como su tamaño.
VB
const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue
WScript.Echo "Current History Buffer Size: " & dwValue
PowerShell
$HKEY_CURRENT_USER =2147483649
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key = "Console"
$Value = "HistoryBufferSize"
$results = $reg.GetDWORDValue($HKEY_CURRENT_USER, $Key, $value)
"Current History Buffer Size: {0}" -f $results.uValue
... ¿crear una nueva clave del registro?

Use la clase StdRegProv , que se encuentra en el espacio de nombres root\default y el método CreateKey .

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

strKeyPath = "SOFTWARE\NewKey" objReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath WScript.Echo "Created registry key HKEY_LOCAL_MACHINE\SOFTWARE\NewKey"

PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key     = "SOFTWARE\NewKey"
$results   = $reg.CreateKey($HKEY_LOCAL_MACHINE, $Key)
If ($results.Returnvalue -eq 0) {"Key created"} 
... ¿crear un nuevo valor del registro en una clave?

Use la clase StdRegProv , que se encuentra en el espacio de nombres root\default, y el método CreateKey . A continuación, use uno de los métodos set, dependiendo del tipo de elemento del registro en el que se encuentra el valor, como SetDWORDValue. Los métodos set crean un valor si aún no existe. Para obtener más información, vea asignar un tipo de datos del registro a un tipo de datos de WMI.

VB
Const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
Set objReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strValueName = "Example_Expanded_String_Value"
strValue = "%PATHEXT%"
objReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
WScript.Echo "Example expanded_String_Value at " & "HKEY_LOCAL_MACHINE\SOFTWARE\NewKey"
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$ValueName = "Example_Expanded_String_Value"
$Value     = "%PATHEXT%"
$Key       = "SOFTWARE\NewKey"
$results   = $reg.SetExpandedStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName, $Value)
If ($results.Returnvalue -eq 0) {"Value created"}
... ¿desea evitar obtener un error de clase no válida al intentar escribir un script para leer el registro?

Use el espacio de nombres root\default al tener acceso a la clase StdRegProv . StdRegProv no forma parte del espacio de nombres de cimv2, que es el motivo por el que " se genera un error de clase no válido " si se intenta conectarse a " Root\cimv2: StdRegProv " .

VB
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue
Wscript.Echo "Current History Buffer Size: " & dwValue
... ¿comprobar la seguridad en una clave del registro específica?

Use la clase StdRegProv , que se encuentra en el espacio de nombres root\default y el método checkAccess . Solo puede comprobar los derechos de acceso del usuario actual que está ejecutando el script o la aplicación. No puede comprobar los derechos de acceso de otro usuario especificado.

... ¿leer y escribir valores de registro binarios?

Use la clase StdRegProv , que se encuentra en " " el espacio de nombres Root\Default y los métodos GetBinaryValue y SetBinaryValue . Los valores del registro que aparecen en la utilidad RegEdt32 como una serie de valores hexadecimales de bytes están en el formato de datos REG_BINARY . Para obtener más información, vea asignar un tipo de datos del registro a un tipo de datos de WMI. En el ejemplo de código de VBScript siguiente se crea una nueva clave con un valor binario. El valor binario se proporciona en la matriz de bytes iValues especificada en hex.

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
iValues = Array(&H01,&Ha2,&H10)
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
strKeyPath = "SOFTWARE\NewKey"
BinaryValueName = "Example Binary Value"

oReg.SetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,BinaryValueName,iValues

El siguiente script lee el valor binario.

VB
const HKEY_LOCAL_MACHINE = &H80000002 
strKeyPath = "SOFTWARE\NewKey"
strValueName = "Example Binary Value"
strComputer = "."
dim iValues(3)
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.GetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,iValues
For i = lBound(iValues) to uBound(iValues)
Wscript.Echo iValues(i)
Next
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$ValueName = "Example Binary Value"
$Values     = @(0x54, 0x46, 0x4C)
$Key       = "SOFTWARE\NewKey"
$results   = $reg.GetBinaryValue($HKEY_LOCAL_MACHINE, $Key, $ValueName)
Foreach ($byte in $results.uvalue) {"{0}" -f $byte.tostring("x")}
... leer y escribir valores del registro que contienen varias cadenas

Use la clase StdRegProv , que se encuentra en el espacio de nombres root\default y los métodos GetMultiStringValue y SetMultiStringValue . Las claves del registro que aparecen en la utilidad RegEdt32 como una serie de cadenas separadas por espacios se encuentran en el formato de datos REG_MULTI_SZ . Para obtener más información, vea asignar un tipo de datos del registro a un tipo de datos de WMI. En el ejemplo de código de VBScript siguiente se crea una nueva clave y un nuevo valor de cadena.

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
MultValueName = "Example Multistring Value"
strComputer = "."
iValues = Array("string1", "string2")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key       = "SOFTWARE\NewKey"
$ValueName = "Example MultiString Value"
$Values     = @("Thomas", "Susan", "Rebecca")
$Key       = "SOFTWARE\NewKey"
$results   = $reg.SetMultiStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName, $Values)
If ($results.Returnvalue -eq 0) {"Value Set"} 

El siguiente script lee el valor de multistring.

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
iValues = Array("string1", "string2")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
MultValueName = "Example Multistring Value"
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
For Each strValue In iValues
WScript.echo strValue
Next
PowerShell
# Define Constants
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key       = "SOFTWARE\NewKey"
$ValueName = "Example MultiString Value"
$results   = $reg.GetMultiStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName)
$results.svalue
... ¿quitar una clave del registro?

Use la clase StdRegProv , que se encuentra en el espacio de nombres root\default y los métodos DeleteKey .

PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key     = "SOFTWARE\NewKey"
$results   = $reg.DeleteKey($HKEY_LOCAL_MACHINE, $Key)
If ($results.Returnvalue -eq 0) {"Key Removed"} 

Tareas de WMI para scripts y aplicaciones

Ejemplos de aplicaciones de C++ de WMI

ScriptCenter de TechNet

Modificar el registro del sistema

StdRegProv