Compartilhar via


Tarefas do WMI: Registro

Tarefas WMI para o registro criam e modificam valores e chaves do Registro. Para obter outros exemplos, consulte o TechNet ScriptCenter em https://www.microsoft.com/technet.

Os exemplos de script mostrados neste tópico obtêm dados somente do computador local. Para obter mais informações sobre como usar o script para obter dados de computadores remotos, consulte Conectando-se ao WMI em um computador remoto.

O procedimento a seguir descreve como executar um script.

Executar um script

  1. Copie o código e salve-o em um arquivo com uma extensão .vbs, como filename.vbs. Verifique se o editor de texto não adiciona uma extensão .txt ao arquivo.
  2. Abra uma janela do prompt de comando e navegue até o diretório onde você salvou o arquivo.
  3. Digite cscript filename.vbs no prompt de comando.
  4. Se você não puder acessar um log de eventos, verifique se está em execução em um prompt de comando com privilégios elevados. Alguns Logs de Eventos, como o Log de Eventos de Segurança, podem ser protegidos pelos Controles de Acesso do Usuário (UAC).

Nota

Por padrão, o cscript exibe a saída de um script na janela do prompt de comando. Como os scripts WMI podem produzir grandes quantidades de saída, convém redirecionar a saída para um arquivo. Digite cscript filename.vbs > outfile.txt no prompt de comando para redirecionar a saída do script filename.vbs para outfile.txt.

A tabela a seguir lista exemplos de script que podem ser usados para obter vários tipos de dados do computador local.

Como faço para... Classes ou métodos WMI
... ler valores de chave do Registro usando WMI? Use a classe stdRegProv, localizada no namespace raiz\padrão. Você não pode obter instâncias dessa classe porque o provedor de registro do sistema é apenas um método e provedor de eventos. No entanto, você pode obter dados do Registro por meio de métodos como EnumKey ou EnumValue. O Win32_Registry, localizado no namespace raiz\cimv2, obtém dados sobre o registro como um todo, como o tamanho dele.
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
... criar uma nova chave do Registro?

Use a classe StdRegProv, localizada no namespace raiz\padrão, e o 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"} 
... criar um novo valor do Registro em uma chave?

Use a classeStdRegProv, localizada no namespace raiz\padrão, e o método CreateKey. Em seguida, use um dos métodos Set, dependendo do tipo de dados do Registro que o valor é, como o SetDWORDValue. Os métodos Set criarão um valor se ele ainda não existir. Para obter mais informações, consulte mapeamento de um tipo de dados do Registro para um tipo de dados 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"}
... evitar receber um erro de classe inválido ao tentar escrever um script para ler o registro?

Use o namespace raiz\padrão ao acessar a classeStdRegProv. stdRegProv não faz parte do namespace cimv2, e é por isso que um erro de "Classe Inválida" é gerado se você tentar se conectar 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
... verificar a segurança em uma chave específica do Registro?

Use a classeStdRegProv, localizada no namespace raiz\padrão e no método CheckAccess. Você só pode verificar os direitos de acesso do usuário atual que está executando o script ou aplicativo. Não é possível verificar os direitos de acesso de outro usuário especificado.

... ler e gravar valores binários do Registro?

Use a classeStdRegProv, localizada no namespace "Root\Default" e nos métodos GetBinaryValue e SetBinaryValue. Os valores do Registro que aparecem no utilitário RegEdt32 como uma série de valores hexadecimal de bytes estão no formato de dados REG_BINARY. Para obter mais informações, consulte mapeamento de um tipo de dados do Registro para um tipo de dados WMI. O exemplo de código VBScript a seguir cria uma nova chave com um valor binário. O valor binário é fornecido no iValues matriz de bytes especificada no 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

O script a seguir lê o valor binário.

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")}
... ler e gravar valores do Registro que contêm várias cadeias de caracteres?

Use a classeStdRegProv, localizada no namespace raiz\padrão e nos métodos GetMultiStringValue e SetMultiStringValue. As chaves do Registro que aparecem no utilitário RegEdt32 como uma série de cadeias de caracteres separadas por espaços estão no formato de dados REG_MULTI_SZ. Para obter mais informações, consulte mapeamento de um tipo de dados do Registro para um tipo de dados WMI. O exemplo de código VBScript a seguir cria uma nova chave e um novo valor de multistring.

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"} 

O script a seguir lê o 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
... remover uma chave do Registro?

Use a classeStdRegProv, localizada no namespace raiz\padrão e nos 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"} 

tarefas WMI para scripts e aplicativos

exemplos de aplicativo WMI C++

do TechNet ScriptCenter

modificando o registro do sistema

stdRegProv