Bagikan melalui


Mendapatkan data registri

Anda dapat memperoleh atau memodifikasi data registri dengan menggunakan kelas WMI StdRegProv dan metodenya. Saat menggunakan utilitas Regedit untuk melihat dan mengubah nilai registri di komputer lokal, StdRegProv memungkinkan Anda menggunakan skrip atau aplikasi untuk mengotomatiskan aktivitas tersebut di komputer lokal dan komputer jarak jauh.

StdRegProv berisi metode untuk melakukan hal berikut:

  • Memverifikasi izin akses untuk pengguna
  • Membuat, menghitung, dan menghapus kunci registri
  • Membuat, menghitung, dan menghapus subkunci atau nilai bernama
  • Membaca, menulis, dan menghapus nilai data

Data registri diatur oleh subtrees, kunci, dan subkuntang yang disarangkan di bawah kunci tingkat atas. Nilai data aktual disebut entri atau nilai bernama.

Subtrees mencakup yang berikut ini:

  • HKEY_CLASSES_ROOT (disingkat HKCR)
  • HKEY_CURRENT_USER (HKCU)
  • HKEY_LOCAL_MACHINE (HKLM)
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

Misalnya, dalam entri registri HKEY\SOFTWARE\Microsoft\DirectX\InstalledVersion, subtree HKEY adalah SOFTWARE; subkunjungnya adalah Microsoft dan DirectX; dan entri nilai bernama InstallVersion.

RegistryKeyChangeEvent terjadi ketika perubahan pada kunci tertentu terjadi, tetapi entri tidak mengidentifikasi bagaimana nilai berubah atau akan peristiwa ini dipicu oleh perubahan di bawah kunci yang ditentukan. Untuk mengidentifikasi perubahan di mana saja dalam struktur kunci hierarkis, gunakan RegistryTreeChangeEvent, yang tidak mengembalikan nilai tertentu atau perubahan kunci yang terjadi. Untuk mendapatkan perubahan nilai entri tertentu, gunakan RegistryValueChangeEvent, lalu baca entri untuk mendapatkan nilai garis besar.

StdRegProv hanya memiliki metode yang dapat dipanggil dari C++ atau skrip, yang berbeda dari struktur kelas Win32.

Contoh kode berikut menunjukkan cara menggunakan metode StdRegProv.EnumKey untuk mencantumkan semua subkuntang perangkat lunak Microsoft di bawah kunci registri.

\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

Catatan

VBScript tidak digunakan lagi. Untuk detailnya, lihat posting blog penghentian VBScript: Garis waktu dan langkah berikutnya.


# 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 memiliki metode yang berbeda untuk membaca berbagai jenis data nilai entri registri. Jika entri memiliki nilai yang tidak diketahui, maka Anda dapat memanggil StdRegProv.EnumValues untuk mencantumkannya. Tabel berikut mencantumkan korespondensi antara metode StdRegProv dan jenis data.

Metode Jenis Data
GetBinaryValue REG_BINARY
GetDWORDValue REG_DWORD
GetExpandedStringValue REG_EXPAND_SZ
GetMultiStringValue REG_MULTI_SZ
GetStringValue REG_SZ

 

Tabel berikut mencantumkan metode terkait untuk membuat kunci atau nilai baru, atau mengubah yang sudah ada.

Metode Jenis Data
SetBinaryValue REG_BINARY
SetDWORDValue REG_DWORD
SetExpandedStringValue REG_EXPAND_SZ
SetMultiStringValue REG_MULTI_SZ
SetStringValue REG_SZ

 

Contoh berikut menunjukkan cara membaca daftar sumber untuk log peristiwa sistem dari kunci registri.

HKEY_LOCAL_MACHINE Sistem Eventlog\Layanan\Set\Kontrol Sistem\Saat Ini\

Perhatikan bahwa item dalam nilai multistring diperlakukan sebagai koleksi atau array.

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

Catatan

VBScript tidak digunakan lagi. Untuk detailnya, lihat posting blog penghentian VBScript: Garis waktu dan langkah berikutnya.


# 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

Penyedia registri dihosting di LocalService—bukan LocalSystem. Oleh karena itu, mendapatkan informasi dari jarak jauh dari subtree HKEY_CURRENT_USER tidak dimungkinkan. Namun, skrip yang dijalankan di komputer lokal masih dapat mengakses HKEY_CURRENT_USER. Anda dapat mengatur model hosting ke LocalSystem pada komputer jarak jauh, tetapi itu adalah risiko keamanan karena registri pada komputer jarak jauh rentan terhadap akses bermusuhan. Untuk informasi selengkapnya, lihat Hosting dan Keamanan Penyedia.

Tugas WMI: Registri