Udostępnij przez


Uzyskiwanie danych rejestru

Dane rejestru można uzyskać lub zmodyfikować przy użyciu klasy WMI StdRegProv i jej metod. Korzystając z narzędzia Regedit do wyświetlania i zmieniania wartości rejestru na komputerze lokalnym, StdRegProv umożliwia zautomatyzowanie takich działań na komputerze lokalnym i komputerach zdalnych za pomocą skryptu lub aplikacji.

StdRegProv zawiera metody wykonywania następujących czynności:

  • Weryfikowanie uprawnień dostępu dla użytkownika
  • Tworzenie, wyliczanie i usuwanie kluczy rejestru
  • Tworzenie, wyliczanie i usuwanie podkluczy lub nazwanych wartości
  • Odczytywanie, zapisywanie i usuwanie wartości danych

Dane rejestru są zorganizowane przez poddrzewa, klucze i podklucze zagnieżdżone pod kluczem głównym. Rzeczywiste wartości danych są nazywane wpisami lub nazwanymi wartościami.

Poddrzewa zawierają następujące elementy:

  • HKEY_CLASSES_ROOT (skrócony jako HKCR)
  • HKEY_CURRENT_USER (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM )
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

Na przykład w wpisie rejestru HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion, poddrzewo HKEY jest SOFTWARE; podklucze są microsoft i DirectX; a nazwany wpis wartości to InstalledVersion.

RegistryKeyChangeEvent występuje, gdy wystąpi zmiana określonego klucza, ale wpis nie identyfikuje sposobu zmiany wartości ani nie spowoduje wyzwolenia tego zdarzenia przez zmiany poniżej określonego klucza. Aby zidentyfikować zmiany w dowolnym miejscu w strukturze klucza hierarchicznego, użyj RegistryTreeChangeEvent, który nie zwraca określonych wartości ani zmian kluczy. Aby uzyskać określoną zmianę wartości wpisu, użyj RegistryValueChangeEvent, a następnie odczytaj wpis w celu uzyskania wartości punktu odniesienia.

StdRegProv ma tylko metody, które mogą być wywoływane z języka C++ lub skryptu, który różni się od struktury klas Win32.

Poniższy przykład kodu pokazuje, jak użyć metody StdRegProv.EnumKey, aby wymienić wszystkie podklucze oprogramowania firmy Microsoft w kluczu rejestru.

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

Notatka

Język VBScript jest przestarzały. Aby uzyskać szczegółowe informacje, zobacz wpis w blogu wycofanie VBScript: Harmonogramy i kolejne kroki.


# 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 ma różne metody odczytywania różnych typów danych wartości wpisu rejestru. Jeśli wpis ma nieznane wartości, możesz wywołać StdRegProv.EnumValues, aby je wyświetlić. W poniższej tabeli wymieniono korespondencję między metodami StdRegProv i typami danych.

Metoda Typ danych
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
GetExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

W poniższej tabeli wymieniono odpowiednie metody tworzenia nowych kluczy lub wartości albo zmiany istniejących.

Metoda Typ danych
UstawWartośćBinarną REG_BINARY
UstawWartośćDWORD REG_DWORD
UstawRozszerzonąWartośćString REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

W poniższym przykładzie pokazano, jak odczytać listę źródeł dziennika zdarzeń systemu z klucza rejestru.

HKEY_LOCAL_MACHINE\system\bieżący zestaw kontrolek\Services\Eventlog\System

Należy pamiętać, że elementy w wartości wielociągowej są traktowane jako kolekcja lub tablica.

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

Notatka

Język VBScript jest przestarzały. Aby uzyskać szczegółowe informacje, zobacz wpis na blogu wycofanie kodu VBScript: Osie czasu i następne kroki.


# 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

Dostawca rejestru jest hostowany w usłudze lokalnej — a nie w systemie lokalnym. W związku z tym zdalne uzyskiwanie informacji z poddrzewa HKEY_CURRENT_USER nie jest możliwe. Skrypty uruchamiane na komputerze lokalnym mogą jednak nadal uzyskiwać dostęp HKEY_CURRENT_USER. Model hostingu można ustawić na LocalSystem na maszynie zdalnej, ale jest to zagrożenie bezpieczeństwa, ponieważ rejestr na maszynie zdalnej jest narażony na wrogi dostęp. Aby uzyskać więcej informacji, zobacz Provider Hosting and Security.

Zadania WMI: Rejestr