WMI-Aufgaben: Registrierung

WMI-Aufgaben für die Registrierung erstellen und ändern Registrierungsschlüssel und -werte. Weitere Beispiele finden Sie im TechNet ScriptCenter unter https://www.microsoft.com/technet .

Die in diesem Thema gezeigten Skriptbeispiele beziehen nur Daten vom lokalen Computer. Weitere Informationen zur Verwendung des Skripts zum Abrufen von Daten von Remotecomputern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

Im folgenden Verfahren wird das Ausführen eines Skripts beschrieben.

So führen Sie ein Skript aus

  1. Kopieren Sie den Code, und speichern Sie ihn in einer Datei mit der Erweiterung .vbs, z. B.filename.vbs. Stellen Sie sicher, dass Ihr Text-Editor der .txt datei keine Erweiterung hinzufüge.
  2. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
  3. Geben Sie cscript filename.vbs eingabeaufforderung ein.
  4. Wenn Sie nicht auf ein Ereignisprotokoll zugreifen können, überprüfen Sie, ob Sie über eine Eingabeaufforderung mit erhöhten Rechten ausführen. Einige Ereignisprotokollen, z. B. das Sicherheitsereignisprotokoll, können durch Benutzerzugriffssteuerungen (User Access Controls, UAC) geschützt werden.

Hinweis

Standardmäßig zeigt cscript die Ausgabe eines Skripts im Eingabeaufforderungsfenster an. Da WMI-Skripts große Mengen an Ausgabe erzeugen können, sollten Sie die Ausgabe an eine Datei umleiten. Geben Sie cscript filename.vbs > outfile.txt eingabeaufforderung ein, um die Ausgabe des skriptsfilename.vbsan outfile.txt.

In der folgenden Tabelle sind Skriptbeispiele aufgeführt, die zum Abrufen verschiedener Datentypen vom lokalen Computer verwendet werden können.

Vorgehensweisen WMI-Klassen oder -Methoden
... Registrierungsschlüsselwerte mit WMI lesen? Verwenden Sie die StdRegProv-Klasse im Stamm-/Standardnamespace. Sie können keine Instanzen dieser Klasse erhalten, da der Systemregistrierungsanbieter nur eine Methode und ein Ereignisanbieter ist. Sie können Registrierungsdaten jedoch über Methoden wie EnumKey oder EnumValue erhalten. Der Win32_Registry, der sich im Namespace root\cimv2 befindet, ruft Daten über die Registrierung als Ganzes ab, z. B. deren Anzahl.
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
... Einen neuen Registrierungsschlüssel erstellen?

Verwenden Sie die StdRegProv-Klasse im Stamm-/Standardnamespace und die CreateKey-Methode.

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"} 
... Einen neuen Registrierungswert unter einem Schlüssel erstellen?

Verwenden Sie die StdRegProv-Klasse im Stamm-/Standardnamespace und die CreateKey-Methode. Verwenden Sie dann eine der Set-Methoden, je nachdem, welcher Registrierungsdatentyp der Wert ist, z. B. SetDWORDValue. Die Set-Methoden erstellen einen Wert, wenn er noch nicht vorhanden ist. Weitere Informationen finden Sie unter Zuordnen eines Registrierungsdatentyps zu einem WMI-Datentyp.

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"}
... Vermeiden Sie beim Versuch, ein Skript zum Lesen der Registrierung zu schreiben, den Fehler Ungültige Klasse?

Verwenden Sie den Namespace root\default, wenn Sie auf die StdRegProv-Klasse zugreifen. StdRegProv ist nicht Teil des cimv2-Namespace. Aus diesem Grund wird ein Fehler der ungültigen Klasse generiert, wenn Sie versuchen, eine Verbindung mit " " " root\cimv2:StdRegProv " herzustellen.

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
... Die Sicherheit eines bestimmten Registrierungsschlüssels überprüfen?

Verwenden Sie die StdRegProv-Klasse im Stamm-/Standardnamespace und die CheckAccess-Methode. Sie können nur die Zugriffsrechte für den aktuellen Benutzer überprüfen, der das Skript oder die Anwendung ausgeführt. Sie können die Zugriffsrechte für einen anderen angegebenen Benutzer nicht überprüfen.

... Binäre Registrierungswerte lesen und schreiben?

Verwenden Sie die StdRegProv-Klasse im " Root\Default-Namespace und die Methoden " GetBinaryValue und SetBinaryValue. Registrierungswerte, die im RegEdt32-Hilfsprogramm als Eine Reihe von Hexadezimalwerten für Byte angezeigt werden, liegen im REG_BINARY Format vor. Weitere Informationen finden Sie unter Zuordnen eines Registrierungsdatentyps zu einem WMI-Datentyp. Im folgenden VBScript-Codebeispiel wird ein neuer Schlüssel mit einem Binärwert erstellt. Der Binärwert wird im iValues-Bytearray angegeben, das in Hex angegeben ist.

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

Das folgende Skript liest den Binärwert.

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")}
... Lesen und Schreiben von Registrierungswerten, die mehrere Zeichenfolgen enthalten?

Verwenden Sie die StdRegProv-Klasse im Stamm-/Standardnamespace und die Methoden GetMultiStringValue und SetMultiStringValue. Registrierungsschlüssel, die im RegEdt32-Hilfsprogramm als eine Reihe von durch Leerzeichen getrennten Zeichenfolgen angezeigt werden, liegen REG_MULTI_SZ Datenformat vor. Weitere Informationen finden Sie unter Zuordnen eines Registrierungsdatentyps zu einem WMI-Datentyp. Im folgenden VBScript-Codebeispiel werden ein neuer Schlüssel und ein neuer Multistringwert erstellt.

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

Das folgende Skript liest den Multistring-Wert.

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
... Einen Registrierungsschlüssel entfernen?

Verwenden Sie die StdRegProv-Klasse im Stamm-/Standardnamespace und die 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-Aufgaben für Skripts und Anwendungen

Beispiele für WMI-C++-Anwendungen

TechNet ScriptCenter

Ändern der Systemregistrierung

StdRegProv