取得登錄數據
您可以使用 WMI StdRegProv 類別及其方法取得或修改登錄數據。 使用 Regedit 公用程式來檢視和變更本機電腦上的登錄值時, StdRegProv 可讓您使用腳本或應用程式,將本機電腦和遠端電腦上的這類活動自動化。
StdRegProv 包含執行下列動作的方法:
- 確認使用者的訪問許可權
- 建立、列舉和刪除登錄機碼
- 建立、列舉和刪除子機碼或具名值
- 讀取、寫入和刪除資料值
登錄數據會依巢狀於最上層索引鍵下的子樹、索引鍵和子機碼來組織。 實際的數據值稱為專案或具名值。
子樹包含下列專案:
- HKEY_CLASSES_ROOT (縮寫為 HKCR)
- HKEY_CURRENT_USER (HKCU)
- HKEY_LOCAL_MACHINE (HKLM)
- HKEY_USERS
- HKEY_CURRENT_CONFIG
例如,在登錄專案 HKEY SOFTWARE Microsoft\DirectX\InstalledVersion 中,HKEY\子樹是 SOFTWARE\;子機碼是 Microsoft 和 DirectX;而具名值專案為 InstalledVersion。
當特定機碼的變更發生時,就會發生 RegistryKeyChangeEvent,但專案不會識別值變更的方式,也不會透過指定機碼下方的變更來觸發此事件。 若要識別階層式索引鍵結構中的任何位置的變更,請使用 RegistryTreeChangeEvent,其不會傳回發生的特定值或機碼變更。 若要取得特定的項目值變更,請使用 RegistryValueChangeEvent,然後讀取專案以取得基準值。
StdRegProv 只有可從 C++ 或腳本呼叫的方法,這與 Win32 類別結構不同。
下列程式代碼範例示範如何使用 StdRegProv.EnumKey 方法來列出登錄機碼下的所有Microsoft軟體子機碼。
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
注意
VBScript 已被取代。 如需詳細資訊,請參閱部落格文章 VBScript 取代:時程表和後續步驟。
# 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 有不同的方法來讀取各種登錄專案值數據類型。 如果專案有未知的值,您可以呼叫 StdRegProv.EnumValues 來列出它們。 下表列出 StdRegProv 方法與數據類型之間的對應。
方法 | 資料類型 |
---|---|
GetBinaryValue | REG_BINARY |
GetDWORDValue | REG_DWORD |
GetExpandedStringValue | REG_EXPAND_SZ |
GetMultiStringValue | REG_MULTI_SZ |
GetStringValue | REG_SZ |
下表列出建立新索引鍵或值,或變更現有索引鍵的對應方法。
方法 | 資料類型 |
---|---|
SetBinaryValue | REG_BINARY |
SetDWORDValue | REG_DWORD |
SetExpandedStringValue | REG_EXPAND_SZ |
SetMultiStringValue | REG_MULTI_SZ |
SetStringValue | REG_SZ |
下列範例示範如何從登錄機碼讀取系統事件記錄檔的來源清單。
HKEY_LOCAL_MACHINE SYSTEM\Current Control Set\Services\事件記錄系統\\
請注意,多字串值中的專案會被視為集合或陣列。
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
注意
VBScript 已被取代。 如需詳細資訊,請參閱部落格文章 VBScript 取代:時程表和後續步驟。
# 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
登錄提供者裝載於 LocalService 中,而不是 LocalSystem。 因此,無法從子樹 HKEY_CURRENT_USER 遠端取得資訊。 不過,在本機計算機上執行的腳本仍然可以存取 HKEY_CURRENT_USER。 您可以將裝載模型設定為遠端電腦上的 LocalSystem,但這是安全性風險,因為遠端電腦上的登錄容易受到惡意存取。 如需詳細資訊,請參閱 提供者裝載和安全性。
相關主題