Partilhar via


Tarefas WMI: Registro

As tarefas WMI para o Registro criam e modificam chaves e valores 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.

Para executar um script

  1. Copie o código e salve-o em um arquivo com uma extensão .vbs, como filename.vbs. Certifique-se de que o editor de texto não adiciona uma extensão .txt ao arquivo.
  2. Abra uma janela de 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 não conseguir aceder a um registo de eventos, verifique se está a executar a partir de uma linha de comandos Elevados. Alguns Logs de Eventos, como o Log de Eventos de Segurança, podem estar protegidos por Controles de Acesso de Usuário (UAC).

Observação

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 o classe StdRegProv, localizada em root\default namespace. Você não pode obter nenhuma instância dessa classe porque o System Registry Provider é 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 root\cimv2, obtém dados sobre o registro como um todo, como seu tamanho.
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 de registo?

Use a classeStdRegProv, localizada em root\default namespace, e o CreateKey método.

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 sob uma chave?

Use a classeStdRegProv, localizada no namespace root\default, e o método CreateKey. Em seguida, use um dos métodos set, dependendo de qual tipo de dados do Registro o valor é, como o SetDWORDValue. Os métodos set criam um valor se ele ainda não existir. Para obter mais informações, consulte Mapeando 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 obter um erro de classe inválida ao tentar escrever um script para ler o registro?

Use o namespace root\default ao acessar a classeStdRegProv. StdRegProv não faz parte do namespace cimv2, e é por isso que um erro "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 de registro específica?

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

... ler e escrever valores binários do registo?

Use a classeStdRegProv, localizada no namespace "Root\Default" e os GetBinaryValue e métodos de SetBinaryValue. Os valores do Registro que aparecem no utilitário RegEdt32 como uma série de valores hexadecimais de byte estão no formato de dados REG_BINARY. Para obter mais informações, consulte Mapeando 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 em 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 = "Exemplo de valor binário" 

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 root\default e os GetMultiStringValue e métodos de 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 Mapeando 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 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 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 de registo?

Use a classeStdRegProv, localizada em root\default namespace e os 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 aplicativos WMI C++

TechNet ScriptCenter

Modificando o registro do sistema

StdRegProv