Freigeben über


Abrufen von Registrierungsdaten

Sie können Registrierungsdaten mithilfe der WMI StdRegProv-Klasse und der zugehörigen Methoden abrufen oder ändern. Während Sie das Regedit-Hilfsprogramm zum Anzeigen und Ändern von Registrierungswerten auf dem lokalen Computer verwenden, können Sie mithilfe eines Skripts oder einer Anwendung solche Aktivitäten auf dem lokalen Computer und Remotecomputer automatisieren.

StdRegProv enthält Methoden zum Ausführen der folgenden Aktionen:

  • Überprüfen der Zugriffsberechtigungen für einen Benutzer
  • Erstellen, Aufzählen und Löschen von Registrierungsschlüsseln
  • Erstellen, Aufzählen und Löschen von Unterschlüsseln oder benannten Werten
  • Lesen, Schreiben und Löschen von Datenwerten

Registrierungsdaten werden nach Unterstrukturen, Schlüsseln und Unterschlüsseln organisiert, die unter einem Schlüssel der obersten Ebene geschachtelt sind. Die tatsächlichen Datenwerte werden als Einträge oder benannte Werte bezeichnet.

Die Unterstrukturen umfassen Folgendes:

  • HKEY_CLASSES_ROOT (abgekürzt als HKCR)
  • HKEY_CURRENT_USER (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM)
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

Beispielsweise ist im Registrierungseintrag HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion die HKEY-Unterstruktur SOFTWARE; die Unterschlüssel sind Microsoft und DirectX, und der benannte Werteintrag lautet InstalledVersion.

Ein RegistryKeyChangeEvent tritt auf, wenn eine Änderung an einem bestimmten Schlüssel auftritt, aber der Eintrag bestimmt nicht, wie sich die Werte ändern, oder dieses Ereignis wird durch Änderungen unterhalb des angegebenen Schlüssels ausgelöst. Um Änderungen an einer beliebigen Stelle in einer hierarchischen Schlüsselstruktur zu identifizieren, verwenden Sie " RegistryTreeChangeEvent", die keine bestimmten Werte oder Schlüsseländerungen zurückgibt. Um eine bestimmte Änderung des Eintragswerts zu erhalten, verwenden Sie " RegistryValueChangeEvent", und lesen Sie dann den Eintrag, um einen Basiswert abzurufen.

StdRegProv verfügt nur über Methoden, die von C++ oder Skript aufgerufen werden können, was sich von der Win32-Klassenstruktur unterscheidet.

Im folgenden Codebeispiel wird gezeigt, wie Sie mit der StdRegProv.EnumKey-Methode alle Microsoft-Softwareunterschlüssel unter dem Registrierungsschlüssel auflisten.

\HKEY_LOCAL_MACHINE SOFTWARE Microsoft\

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

Hinweis

VBScript ist veraltet. Ausführliche Informationen finden Sie im Blogbeitrag VBScript-Veraltet: Zeitachsen und nächste Schritte.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SOFTWARE\Microsoft'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

StdRegProv verfügt über verschiedene Methoden zum Lesen der verschiedenen Datentypen für Registrierungseintragswerte. Wenn der Eintrag unbekannte Werte aufweist, können Sie StdRegProv.EnumValues aufrufen, um sie aufzulisten. Die folgende Tabelle enthält die Korrespondenz zwischen StdRegProv-Methoden und den Datentypen.

Methode Datentyp
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
GetExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

In der folgenden Tabelle sind die entsprechenden Methoden zum Erstellen neuer Schlüssel oder Werte oder zum Ändern vorhandener Schlüssel aufgeführt.

Methode Datentyp
SetBinaryValue REG_BINARY
SetDWORDValue REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

Das folgende Beispiel zeigt, wie Sie die Liste der Quellen für das Systemereignisprotokoll aus dem Registrierungsschlüssel lesen.

\HKEY_LOCAL_MACHINE SYSTEM\Current Control Set\Services\Eventlog System\

Beachten Sie, dass die Elemente im Wert mit mehreren Zeichenfolgen als Sammlung oder Matrix behandelt werden.

const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SYSTEM\CurrentControlSet\Services\Eventlog\System"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys
Wscript.Echo subkey
    
Next

Hinweis

VBScript ist veraltet. Ausführliche Informationen finden Sie im Blogbeitrag VBScript-Veraltet: Zeitachsen und nächste Schritte.


# The signature for EnumKey method of StdRegProv class:
#
# uint32 EnumKey(
#  [in]  uint32 hDefKey = HKEY_LOCAL_MACHINE,
#  [in]  string sSubKeyName,
#  [out] string sNames[]
# );

$arguments = @{
    hDefKey = [uint32]2147483650 # HKEY_LOCAL_MACHINE
    sSubKeyName = 'SYSTEM\CurrentControlSet\Services\Eventlog\System'
}

$subkeys = Invoke-CimMethod -ClassName StdRegProv -MethodName EnumKey -Arguments $arguments
subkeys.sNames

Der Registrierungsanbieter wird in LocalService gehostet , nicht im LocalSystem. Daher ist das Remote-Abrufen von Informationen aus der Unterstruktur HKEY_CURRENT_USER nicht möglich. Skripts, die auf dem lokalen Computer ausgeführt werden, können jedoch weiterhin auf HKEY_CURRENT_USER zugreifen. Sie können das Hostingmodell auf einem Remotecomputer auf "LocalSystem" festlegen, dies ist jedoch ein Sicherheitsrisiko, da die Registrierung auf dem Remotecomputer anfällig für den feindlichen Zugriff ist. Weitere Informationen finden Sie unter Anbieterhosting und -sicherheit.

WMI-Aufgaben: Registrierung