共用方式為


取得登錄數據

您可以使用 WMI StdRegProv 類別及其方法取得或修改登錄數據。 使用 Regedit 公用程式來檢視和變更本機電腦上的登錄值時, StdRegProv 可讓您使用腳本或應用程式,將本機電腦和遠端電腦上的這類活動自動化。

StdRegProv 包含執行下列動作的方法:

  • 確認使用者的訪問許可權
  • 建立、列舉和刪除登錄機碼
  • 建立、列舉和刪除子機碼或具名值
  • 讀取、寫入和刪除資料值

登錄數據會依巢狀於最上層索引鍵下的子樹、索引鍵和子機碼來組織。 實際的數據值稱為專案或具名值。

子樹包含下列專案:

  • HKEY_CLASSES_ROOT (縮寫為 HKCR
  • HKEY_CURRENT_USER (HKCU
  • HKEY_LOCAL_MACHINEHKLM
  • HKEY_USERS
  • HKEY_CURRENT_CONFIG

例如,在登錄專案 HKEY SOFTWARE Microsoft\DirectX\InstalledVersion 中,HKEY\子樹是 SOFTWARE\;子機碼是 MicrosoftDirectX;而具名值專案為 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,但這是安全性風險,因為遠端電腦上的登錄容易受到惡意存取。 如需詳細資訊,請參閱 提供者裝載和安全性

WMI 工作:登錄