Freigeben über


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 erhalten 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.

Das folgende Verfahren beschreibt, wie ein Skript ausgeführt wird.

Ausführen eines Skripts

  1. Kopieren Sie den Code, und speichern Sie ihn in einer Datei mit der Erweiterung .vbs, z. B. filename.vbs. Stellen Sie sicher, dass der Text-Editor der Datei keine .txt Erweiterung hinzu fügt.
  2. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
  3. Geben Sie cscript filename.vbs an der Eingabeaufforderung ein.
  4. Wenn Sie nicht auf ein Ereignisprotokoll zugreifen können, überprüfen Sie, ob Sie über eine Eingabeaufforderung mit erhöhten Rechten ausgeführt werden. Einige Ereignisprotokolle, z. B. das Sicherheitsereignisprotokoll, können durch Benutzerzugriffssteuerelemente (UAC) geschützt werden.

Anmerkung

In cscript wird standardmäßig die Ausgabe eines Skripts im Eingabeaufforderungsfenster angezeigt. Da WMI-Skripts große Mengen an Ausgabe erzeugen können, möchten Sie die Ausgabe möglicherweise an eine Datei umleiten. Geben Sie cscript filename.vbs > outfile.txt an der Eingabeaufforderung ein, um die Ausgabe des filename.vbs Skripts an outfile.txtumzuleiten.

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

Wie kann ich... WMI-Klassen oder -Methoden
... Registrierungsschlüsselwerte mit WMI lesen? Verwenden Sie die StdRegProv Klasse, die sich im Stamm-/Standardnamespace befindet. Sie können keine Instanzen dieser Klasse abrufen, da der Systemregistrierungsanbieter nur eine Methode und ein Ereignisanbieter ist. Sie können Registrierungsdaten jedoch über Methoden wie EnumKey- oder EnumValue-abrufen. Der Win32_Registry, der sich im Root\cimv2-Namespace befindet, ruft Daten über die Registrierung als Ganzes ab, z. B. wie groß es ist.
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, die sich im Stamm-\Standardnamespace befindet, 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, die sich im Root\default-Namespace befindet, und die CreateKey-Methode. Verwenden Sie dann eine der Set-Methoden, je nachdem, welcher Registrierungsdatentyp der Wert ist, z. B. die 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"}
... Fehler "Ungültige Klasse" beim Schreiben eines Skripts zum Lesen der Registrierung vermeiden?

Verwenden Sie den Stamm-/Standardnamespace beim Zugriff auf die StdRegProv-klasse Klasse. StdRegProv ist nicht Teil des cimv2-Namespace, weshalb ein Fehler "Ungültige Klasse" generiert wird, 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 für einen bestimmten Registrierungsschlüssel überprüfen?

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

... Binärregistrierungswerte lesen und schreiben?

Verwenden Sie die StdRegProv Klasse, die sich im Namespace "Root\Default" und im GetBinaryValue- und SetBinaryValue--Methoden befindet. Registrierungswerte, die im Hilfsprogramm RegEdt32 als Eine Reihe von Byte hexadezimalen Werten angezeigt werden, befinden sich im REG_BINARY Datenformat. 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 in der iValues- bytearray angegeben in Hex angegeben.

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")}
... Registrierungswerte lesen und schreiben, die mehrere Zeichenfolgen enthalten?

Verwenden Sie die StdRegProv Klasse, die sich im Root\default-Namespace und im GetMultiStringValue- und SetMultiStringValue- Methoden befindet. Registrierungsschlüssel, die im Hilfsprogramm RegEdt32 als eine Reihe von durch Leerzeichen getrennten Zeichenfolgen angezeigt werden, befinden sich im REG_MULTI_SZ Datenformat. Weitere Informationen finden Sie unter Zuordnen eines Registrierungsdatentyps zu einem WMI-Datentyp. Im folgenden VBScript-Codebeispiel wird ein neuer Schlüssel und ein neuer Wert mit mehreren Zeichenfolgen 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 Wert mit mehreren Zeichenfolgen.

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, die sich im Stamm\Standardnamespace und den DeleteKey--Methoden befindet.

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

WMI C++-Anwendungsbeispiele

TechNet ScriptCenter-

Ändern der Systemregistrierung

StdRegProv