Delen via


WMI-taken: register

WMI-taken voor het maken en wijzigen van registersleutels en -waarden. Zie het TechNet ScriptCenter op https://www.microsoft.com/technetvoor andere voorbeelden.

De scriptvoorbeelden die in dit onderwerp worden weergegeven, verkrijgen alleen gegevens van de lokale computer. Zie Verbinding maken met WMI op een externe computer op een externe computervoor meer informatie over het gebruik van het script om gegevens op te halen van externe computers.

In de volgende procedure wordt beschreven hoe u een script uitvoert.

Een script uitvoeren

  1. Kopieer de code en sla deze op in een bestand met de extensie .vbs, zoals bestandsnaam.vbs. Zorg ervoor dat uw teksteditor geen .txt extensie aan het bestand toevoegt.
  2. Open een opdrachtpromptvenster en navigeer naar de map waarin u het bestand hebt opgeslagen.
  3. Typ cscript bestandsnaam.vbs bij de opdrachtprompt.
  4. Als u geen toegang hebt tot een gebeurtenislogboek, controleert u of u wordt uitgevoerd vanaf een opdrachtprompt met verhoogde bevoegdheid. Sommige gebeurtenislogboeken, zoals het beveiligingslogboek, kunnen worden beveiligd door UAC (User Access Controls).

Notitie

In cscript wordt standaard de uitvoer van een script weergegeven in het opdrachtpromptvenster. Omdat WMI-scripts grote hoeveelheden uitvoer kunnen produceren, kunt u de uitvoer omleiden naar een bestand. Typ cscript bestandsnaam.vbs > outfile.txt bij de opdrachtprompt om de uitvoer van de bestandsnaam.vbs script om te leiden naar outfile.txt.

De volgende tabel bevat scriptvoorbeelden die kunnen worden gebruikt voor het verkrijgen van verschillende typen gegevens van de lokale computer.

Hoe kan ik... WMI-klassen of -methoden
... registersleutelwaarden lezen met WMI? Gebruik de klasse StdRegProv in root\default namespace. U kunt geen exemplaren van deze klasse ophalen omdat de System Registry Provider alleen een methode en gebeurtenisprovider is. U kunt echter registergegevens ophalen via methoden zoals EnumKey of EnumValue. De Win32_Registry, gelegen in root\cimv2-naamruimte, haalt gegevens op over het register als geheel, zoals hoe groot het is.
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
... een nieuwe registersleutel maken?

Gebruik de klasse StdRegProv, die zich in de hoofdnaamruimte\standaardnaamruimte bevindt en de methode CreateKey.

VB
              
              const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Stel 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"} 
... maakt u een nieuwe registerwaarde onder een sleutel?

Gebruik de klasse StdRegProv in de hoofdnaamruimte\standaardnaamruimte en de methode CreateKey. Gebruik vervolgens een van de setmethoden, afhankelijk van het registergegevenstype dat de waarde is, zoals de SetDWORDValue. Met de methoden Instellen wordt een waarde gemaakt als deze nog niet bestaat. Zie Een registergegevenstype toewijzen aan een WMI-gegevenstypevoor meer informatie.

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"}
... voorkomt u dat er een ongeldige klassefout optreedt bij het schrijven van een script om het register te lezen?

Gebruik de hoofdnaamruimte\standaardnaamruimte bij toegang tot de klasse StdRegProv. StdRegProv maakt geen deel uit van de cimv2-naamruimte. Daarom wordt er een fout 'Ongeldige klasse' gegenereerd als u verbinding probeert te maken met 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
... beveiliging controleren op een specifieke registersleutel?

Gebruik de klasse StdRegProv in root\default namespace en de methode CheckAccess. U kunt alleen de toegangsrechten controleren voor de huidige gebruiker waarop het script of de toepassing wordt uitgevoerd. U kunt de toegangsrechten voor een andere opgegeven gebruiker niet controleren.

... binaire registerwaarden lezen en schrijven?

Gebruik de klasse StdRegProv, die zich in de naamruimte Root\Default bevindt en de methoden GetBinaryValue en SetBinaryValue. Registerwaarden die in het hulpprogramma RegEdt32 worden weergegeven als een reeks hexadecimale bytewaarden, hebben de REG_BINARY gegevensindeling. Zie Een registergegevenstype toewijzen aan een WMI-gegevenstypevoor meer informatie. In het volgende VBScript-codevoorbeeld wordt een nieuwe sleutel met een binaire waarde gemaakt. De binaire waarde wordt opgegeven in de iValues bytematrix die is opgegeven in 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

Met het volgende script wordt de binaire waarde gelezen.

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")}
... registerwaarden lezen en schrijven die meerdere tekenreeksen bevatten?

Gebruik de klasse StdRegProv in root\default namespace en de methode GetMultiStringValue en SetMultiStringValue methoden. Registersleutels die worden weergegeven in het hulpprogramma RegEdt32 als een reeks tekenreeksen gescheiden door spaties, hebben de REG_MULTI_SZ gegevensindeling. Zie Een registergegevenstype toewijzen aan een WMI-gegevenstypevoor meer informatie. In het volgende VBScript-codevoorbeeld wordt een nieuwe sleutel en een nieuwe multistringwaarde gemaakt.

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

Met het volgende script wordt de waarde voor meerdere tekenreeksen gelezen.

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
... een registersleutel verwijderen?

Gebruik de klasse StdRegProv in root\default namespace en de DeleteKey methoden.

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-taken voor scripts en toepassingen

WMI C++-toepassingsvoorbeelden

TechNet ScriptCenter

het systeemregister wijzigen

StdRegProv-