共用方式為


WMI 工作:登錄

登錄的 WMI 工作會建立和修改登錄機碼和值。 如需其他範例,請參閱techNet ScriptCenter at https://www.microsoft.com/technet

本主題中顯示的腳本範例只會從本機計算機取得數據。 如需如何使用文稿從遠端電腦取得資料的詳細資訊,請參閱 遠端電腦上連線到 WMI

下列程式描述如何執行腳本。

執行腳本

  1. 複製程序代碼,並將它儲存在擴展名為 .vbs 的檔案中,例如 filename.vbs。 請確定文字編輯器不會將 .txt 擴展名新增至檔案。
  2. 開啟命令提示字元視窗,並流覽至您儲存盤案的目錄。
  3. 在命令提示字元中輸入 cscript filename.vbs
  4. 如果您無法存取事件記錄檔,請檢查您是否正在從提高許可權的命令提示字元執行。 某些事件記錄檔,例如安全性事件記錄檔,可能會受到使用者訪問控制 (UAC) 的保護。

注意

根據預設,cscript 會在命令提示字元視窗中顯示文稿的輸出。 由於 WMI 命令稿可能會產生大量的輸出,因此您可能會想要將輸出重新導向至檔案。 在命令提示字元中輸入 cscript filename.vbs > outfile.txt,將 filename.v bs 的輸出重新導向至 outfile.txt

下表列出可用來從本機計算機取得各種數據類型的腳本範例。

如何... WMI 類別或方法
...使用 WMI 讀取登錄機碼值? 使用位於 root\default 命名空間中的 StdRegProv 類別。 您無法取得此類別的任何實例,因為 系統登錄提供者 只是方法和事件提供者。 不過,您可以透過 EnumKeyEnumValue等方法來取得登錄數據。 位於 root\cimv2 命名空間中的 Win32_Registry會取得整個登錄的相關數據,例如其大小。
VB
const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue
WScript.Echo "Current History Buffer Size: " & dwValue
PowerShell
$HKEY_CURRENT_USER =2147483649
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key = "Console"
$Value = "HistoryBufferSize"
$results = $reg.GetDWORDValue($HKEY_CURRENT_USER, $Key, $value)
"Current History Buffer Size: {0}" -f $results.uValue
...建立新的登錄機碼?

使用位於 root\default 命名空間的 StdRegProv 類別,以及 CreateKey 方法。

VB
              
              const HKEY_LOCAL_MACHINE = &H80000002 strComputer = “.”Set objReg=GetObject( “winmgmts:{impersonationLevel=impersonate}!\\” & strComputer & “\root\default:StdRegProv”)

strKeyPath = "SOFTWARE\NewKey" objReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath WScript.Echo "Created registry key HKEY_LOCAL_MACHINE\SOFTWARE\NewKey"

PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key     = "SOFTWARE\NewKey"
$results   = $reg.CreateKey($HKEY_LOCAL_MACHINE, $Key)
If ($results.Returnvalue -eq 0) {"Key created"} 
...在機碼下建立新的登錄值?

使用位於 root\default 命名空間中的 StdRegProv 類別,以及 CreateKey 方法。 然後根據值的類型,使用其中一個 Set 方法,例如 SetDWORDValue。 如果 Set 方法不存在,就會建立值。 如需詳細資訊,請參閱 將登入資料類型對應至 WMI 資料類型

VB
Const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
Set objReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strValueName = "Example_Expanded_String_Value"
strValue = "%PATHEXT%"
objReg.SetExpandedStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue
WScript.Echo "Example expanded_String_Value at " & "HKEY_LOCAL_MACHINE\SOFTWARE\NewKey"
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$ValueName = "Example_Expanded_String_Value"
$Value     = "%PATHEXT%"
$Key       = "SOFTWARE\NewKey"
$results   = $reg.SetExpandedStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName, $Value)
If ($results.Returnvalue -eq 0) {"Value created"}
...避免在嘗試撰寫文本以讀取登錄時收到無效的類別錯誤?

存取 StdRegProv 類別時,請使用 root\default 命名空間。 StdRegProv 不是 cimv2 命名空間的一部分,因此如果您嘗試連線到 “root\cimv2:StdRegProv”,就會產生「無效類別」錯誤。

VB
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set oReg=GetObject( "winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv") 
strKeyPath = "Console"
strValueName = "HistoryBufferSize"
oReg.GetDWORDValue HKEY_CURRENT_USER, strKeyPath, strValueName, dwValue
Wscript.Echo "Current History Buffer Size: " & dwValue
...檢查特定登錄機碼的安全性嗎?

使用位於 root\default 命名空間和 CheckAccess 方法的 StdRegProv 類別。 您只能檢查執行文稿或應用程式之目前使用者的訪問許可權。 您無法檢查另一個指定使用者的訪問許可權。

...讀取和寫入二進位登錄值?

使用位於 「Root\Default」 命名空間和 getBinaryValueSetBinaryValue 方法中的 StdRegProv 類別。 以 RegEdt32 公用程式形式顯示為一系列位元組十六進位值的登錄值,會以 REG_BINARY 數據格式顯示。 如需詳細資訊,請參閱 將登入資料類型對應至 WMI 資料類型。 下列 VBScript 程式代碼範例會建立具有二進位值的新索引鍵。 二進位值會在 hex 中指定的 iValues 位元組陣列中提供。

VB
              
              const HKEY_LOCAL_MACHINE = &H80000002 strKeyPath = “SOFTWARE\NewKey” strComputer = “.” iValues = Array(&H01,&Ha2,&H10) Set oReg=GetObject(“winmgmts:{impersonationLevel=impersonate}!\\” & strComputer & “\root\default:StdRegProv”) oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath strKeyPath = “SOFTWARE\NewKey” BinaryValueName = “Example Binary Value”

oReg.SetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,BinaryValueName,iValues

下列腳本會讀取二進位值。

VB
const HKEY_LOCAL_MACHINE = &H80000002 
strKeyPath = "SOFTWARE\NewKey"
strValueName = "Example Binary Value"
strComputer = "."
dim iValues(3)
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.GetBinaryValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,iValues
For i = lBound(iValues) to uBound(iValues)
Wscript.Echo iValues(i)
Next
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$ValueName = "Example Binary Value"
$Values     = @(0x54, 0x46, 0x4C)
$Key       = "SOFTWARE\NewKey"
$results   = $reg.GetBinaryValue($HKEY_LOCAL_MACHINE, $Key, $ValueName)
Foreach ($byte in $results.uvalue) {"{0}" -f $byte.tostring("x")}
...讀取和寫入包含多個字串的登錄值?

使用位於 root\default 命名空間中的 StdRegProv 類別,以及 getMultiStringValueSetMultiStringValue 方法。 以空格分隔的一系列字串,出現在 RegEdt32 公用程式中的登錄機碼會以數據格式 REG_MULTI_SZ。 如需詳細資訊,請參閱 將登入資料類型對應至 WMI 資料類型。 下列 VBScript 程式代碼範例會建立新的索引鍵和新的多字串值。

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
MultValueName = "Example Multistring Value"
strComputer = "."
iValues = Array("string1", "string2")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.CreateKey HKEY_LOCAL_MACHINE,strKeyPath
oReg.SetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key       = "SOFTWARE\NewKey"
$ValueName = "Example MultiString Value"
$Values     = @("Thomas", "Susan", "Rebecca")
$Key       = "SOFTWARE\NewKey"
$results   = $reg.SetMultiStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName, $Values)
If ($results.Returnvalue -eq 0) {"Value Set"} 

下列腳本會讀取多字串值。

VB
const HKEY_LOCAL_MACHINE = &H80000002
strKeyPath = "SOFTWARE\NewKey"
strComputer = "."
iValues = Array("string1", "string2")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
MultValueName = "Example Multistring Value"
oReg.GetMultiStringValue HKEY_LOCAL_MACHINE,strKeyPath,MultValueName,iValues
For Each strValue In iValues
WScript.echo strValue
Next
PowerShell
# Define Constants
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key       = "SOFTWARE\NewKey"
$ValueName = "Example MultiString Value"
$results   = $reg.GetMultiStringValue($HKEY_LOCAL_MACHINE, $Key, $ValueName)
$results.svalue
...拿掉登錄機碼嗎?

使用位於 root\default 命名空間和 DeleteKey 方法的 StdRegProv 類別。

PowerShell
$HKEY_Local_Machine =2147483650 
$computer ='.'
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key     = "SOFTWARE\NewKey"
$results   = $reg.DeleteKey($HKEY_LOCAL_MACHINE, $Key)
If ($results.Returnvalue -eq 0) {"Key Removed"} 

文稿和應用程式的 WMI 工作

WMI C++應用程式範例

TechNet ScriptCenter

修改系統登錄

StdRegProv