Abrufen von Registrierungsdaten

Sie können Registrierungsdaten abrufen oder ändern, indem Sie die WMI-StdRegProv-Klasse und deren Methoden verwenden. Während Sie das Regedit-Hilfsprogramm zum Anzeigen und Ändern von Registrierungswerten auf dem lokalen Computer verwenden, können Sie mit StdRegProv ein Skript oder eine Anwendung verwenden, um solche Aktivitäten auf dem lokalen Computer und den Remotecomputern zu automatisieren.

StdRegProv enthält Methoden für folgende 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 Unterstruktur, 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 Unterstruktur umfasst Folgendes:

  • HKEY _ CLASSES _ ROOT (abgekürzt als HKCR)
  • HKEY _ AKTUELLER _ BENUTZER (HKCU)
  • HKEY _ LOKALER _ COMPUTER (HKLM)
  • _HKEY-BENUTZER
  • AKTUELLE _ _ HKEY-KONFIGURATION

Im Registrierungseintrag HKEY \ SOFTWARE \ Microsoft \ DirectX InstalledVersion ist die HKEY-Unterstruktur beispielsweise SOFTWARE, die Unterschlüssel sind Microsoft und DirectX, und der benannte Werteintrag ist \ InstalledVersion.

Ein RegistryKeyChangeEvent tritt auf, wenn eine Änderung an einem bestimmten Schlüssel auftritt, aber der Eintrag nicht identifiziert, wie sich die Werte ändern, und dieses Ereignis wird auch nicht 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,das keine bestimmten Werte oder Schlüsseländerungen zurück gibt, die auftreten. Um eine bestimmte Eintragswertänderung zu erhalten, verwenden Sie RegistryValueChangeEvent, und lesen Sie dann den Eintrag, um einen Baselinewert zu erhalten.

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

Das folgende Codebeispiel zeigt, wie Sie die StdRegProv.EnumKey-Methode verwenden, um 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 verfügt über verschiedene Methoden zum Lesen der verschiedenen Datentypen für Registrierungswert. Wenn der Eintrag unbekannte Werte auflistet, können Sie StdRegProv.EnumValues aufrufen. 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 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 Multizeichenfolgenwert als Auflistung oder 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 gehostet, nicht im LocalSystem. Aus diesem Grund ist es nicht möglich, Informationen remote aus der Teilstruktur HKEY _ CURRENT _ USER zu erhalten. 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 einen ung riskanter Zugriff ist. Weitere Informationen finden Sie unter Anbieterhosting und Sicherheit.

Beispiele

Im VBScript-Codebeispiel Read a Binary Registry Value (Binären Registrierungswert lesen) im TechNet-Katalog wird WMI verwendet, um einen binären Registrierungswert zu lesen.

WMI-Aufgaben: Registrierung