Dela via


WMI-uppgifter: Register

WMI-uppgifter för registret skapar och ändrar registernycklar och -värden. Andra exempel finns i TechNet ScriptCenter på https://www.microsoft.com/technet.

Skriptexemplen som visas i det här avsnittet hämtar endast data från den lokala datorn. Mer information om hur du använder skriptet för att hämta data från fjärrdatorer finns i Ansluta till WMI på en fjärrdator.

Följande procedur beskriver hur du kör ett skript.

Så här kör du ett skript

  1. Kopiera koden och spara den i en fil med tillägget .vbs, till exempel filename.vbs. Kontrollera att textredigeraren inte lägger till ett .txt filnamnstillägg.
  2. Öppna ett kommandotolksfönster och navigera till katalogen där du sparade filen.
  3. Skriv cscript filename.vbs i kommandotolken.
  4. Om du inte kan komma åt en händelselogg kontrollerar du om du kör från en upphöjd kommandotolk. Vissa händelseloggar, till exempel säkerhetshändelseloggen, kan skyddas av användaråtkomstkontroller (UAC).

Not

Som standard visar cscript utdata från ett skript i kommandotolkens fönster. Eftersom WMI-skript kan generera stora mängder utdata kanske du vill omdirigera utdata till en fil. Skriv cscript filename.vbs > outfile.txt i kommandotolken för att omdirigera utdata från filename.vbs skriptet till outfile.txt.

I följande tabell visas skriptexempel som kan användas för att hämta olika typer av data från den lokala datorn.

Hur gör jag... WMI-klasser eller -metoder
... läsa registernyckelvärden med hjälp av WMI? Använd klassen StdRegProv, som finns i namnområdet root\default. Du kan inte hämta några instanser av den här klassen eftersom System Registry Provider endast är en metod- och händelseprovider. Du kan dock hämta registerdata via metoder som EnumKey eller EnumValue. Win32_Registry, som finns i namnområdet root\cimv2, hämtar data om registret som helhet, till exempel hur stort det är.
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
... skapa en ny registernyckel?

Använd klassen StdRegProv, som finns i namnområdet root\default och metoden CreateKey.

VB
              
              const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Ange 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"} 
... skapa ett nytt registervärde under en nyckel?

Använd klassen StdRegProv, som finns i namnområdet root\default och metoden CreateKey. Använd sedan någon av uppsättningsmetoderna, beroende på vilken registerdatatyp värdet är, till exempel SetDWORDValue-. Set-metoderna skapar ett värde om det inte redan finns. Mer information finns i Mappa en registerdatatyp till en WMI-datatyp.

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"}
... undvika att få ett ogiltigt klassfel när du försöker skriva ett skript för att läsa registret?

Använd namnområdet root\default när du öppnar klassen StdRegProv. StdRegProv inte ingår i cimv2-namnområdet, varför ett "Ogiltig klass"-fel genereras om du försöker ansluta till "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
... kontrollera säkerheten för en specifik registernyckel?

Använd klassen StdRegProv, som finns i root\default-namnområdet och metoden CheckAccess. Du kan bara kontrollera åtkomsträttigheterna för den aktuella användaren som kör skriptet eller programmet. Du kan inte kontrollera åtkomsträttigheterna för en annan angiven användare.

... läsa och skriva binära registervärden?

Använd klassen StdRegProv, som finns i namnområdet "Root\Default" och GetBinaryValue och SetBinaryValue metoder. Registervärden som visas i verktyget RegEdt32 som en serie byte hexadecimala värden finns i REG_BINARY dataformat. Mer information finns i Mappa en registerdatatyp till en WMI-datatyp. I följande VBScript-kodexempel skapas en ny nyckel med ett binärt värde. Binärvärdet anges i iValues bytematris som anges i 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

Följande skript läser det binära värdet.

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")}
... läsa och skriva registervärden som innehåller flera strängar?

Använd klassen StdRegProv, som finns i root\default-namnområdet och metoderna GetMultiStringValue och SetMultiStringValue. Registernycklar som visas i verktyget RegEdt32 som en serie strängar avgränsade med blanksteg är i REG_MULTI_SZ dataformat. Mer information finns i Mappa en registerdatatyp till en WMI-datatyp. I följande VBScript-kodexempel skapas en ny nyckel och ett nytt multistring-värde.

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

Följande skript läser multistring-värdet.

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
... ta bort en registernyckel?

Använd klassen StdRegProv, som finns i root\default-namnområdet och metoderna 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"} 

WMI-uppgifter för skript och program

WMI C++-programexempel

TechNet ScriptCenter

Ändra systemregistrets

StdRegProv