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.
Topik terkait