Abrufen von Registrierungsdaten

Sie können Registrierungsdaten mithilfe der WMI-Klasse StdRegProv und deren Methoden abrufen oder ändern. Während Sie das Hilfsprogramm Regedit verwenden, um Registrierungswerte auf dem lokalen Computer anzuzeigen und zu ändern, ermöglicht Ihnen StdRegProv die Verwendung eines Skripts oder einer Anwendung zum Automatisieren solcher Aktivitäten auf dem lokalen Computer und Remotecomputern.

StdRegProv enthält Methoden für die folgenden Aufgaben:

  • Ü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 sind 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 lautet im Registrierungseintrag HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion die HKEY-Unterstruktur SOFTWARE. Die Unterschlüssel sind Microsoft und DirectX, und der benannte Werteintrag ist InstalledVersion.

Ein Ereignis vom Typ RegistryKeyChangeEvent tritt auf, wenn eine Änderung an einem bestimmten Schlüssel vorgenommen wird, wobei aber weder der Eintrag identifiziert, wie sich die Werte ändern, noch dieses Ereignis durch Änderungen unter dem angegebenen Schlüssel ausgelöst wird. Verwenden Sie zum Identifizieren von Änderungen an einer beliebigen Stelle in einer hierarchischen Schlüsselstruktur das Ereignis RegistryTreeChangeEvent, das keine auftretenden Werte oder Schlüsseländerungen zurückgibt. Verwenden Sie zum Abrufen einer bestimmten Eintragswertänderung das Ereignis RegistryValueChangeEvent, und lesen Sie dann den Eintrag zum Abrufen eines Baselinewerts.

StdRegProv enthält nur Methoden, die von C++ oder einem Skript aufgerufen werden können, das sich von der Win32-Klassenstruktur unterscheidet.

Im folgenden Codebeispiel wird gezeigt, wie sie mithilfe der Methode StdRegProv.EnumKey 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

$HKEY_LOCAL_MACHINE = 2147483650
$strKeyPath = "SOFTWARE\Microsoft"

$objReg = [WMIClass]"root\default:StdRegProv"

$arrSubKeys = $objReg.EnumKey($HKEY_LOCAL_MACHINE, $strKeyPath)
foreach ($subKey in ($arrSubKeys.sNames))
{
    $subKey
}

StdRegProv enthält verschiedene Methoden zum Lesen der verschiedenen Wertdatentypen von Registrierungseinträgen. Wenn der Eintrag unbekannte Werte enthält, können Sie StdRegProv.EnumValues aufrufen, um sie aufzulisten. In der folgenden Tabelle ist die Entsprechung zwischen StdRegProv-Methoden und den Datentypen aufgeführt.

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 von neuen Schlüsseln oder Werten und zum Ändern von vorhandenen Schlüsseln oder Werten aufgeführt.

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

 

Im folgenden Beispiel wird gezeigt, wie Sie die Liste der Quellen für das Systemereignisprotokoll aus dem Registrierungsschlüssel lesen.

HKEY_LOCAL_MACHINE\SYSTEM\Aktueller Steuerelementsatz\Dienste\Ereignisprotokoll\System

Beachten Sie, dass die Elemente im Wert der mehrteiligen Zeichenfolge (Multistring Value) als eine Auflistung oder ein Array behandelt werden.

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

Der Registrierungsanbieter wird in „LocalService“ (nicht in „LocalSystem“) gehostet. Deshalb ist der Remoteabruf von Informationen aus der Unterstruktur HKEY_CURRENT_USER nicht möglich. Skripts, die auf dem lokalen Computer ausgeführt werden, können auf HKEY_CURRENT_USER jedoch weiterhin zugreifen. Sie können das Hostingmodell auf einem Remotecomputer auf „LocalSystem“ festlegen. Dies ist aber ein Sicherheitsrisiko, weil die Registrierung auf dem Remotecomputer anfällig für feindlichen Zugriff ist. Weitere Informationen finden Sie unter Anbieterhosting und -sicherheit.

Beispiele

Im VBScript-Codebeispiel Read a Binary Registry Value (Lesen eines binären Registrierungswerts) im TechNet-Katalog wird mithilfe von WMI ein binärer Registrierungswert gelesen.

WMI-Aufgaben: Registrierung