...使用 WMI 读取注册表项值? |
使用位于 root\default 命名空间中的 StdRegProv 类。 无法获取此类的任何实例,因为系统注册表提供程序只是方法和事件提供程序。 但是,你可以通过 EnumKey 或 EnumValue 等方法获取注册表数据。 位于 root\cimv2 命名空间中的 Win32_Registry 获取有关整个注册表的数据,例如其大小。
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
|
$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 方法。
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"
|
$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 数据类型。
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"
|
$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”时生成“类无效”错误的原因。
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 命名空间中的 StdRegProv 类和 CheckAccess 方法。 只能检查运行脚本或应用程序的当前用户的访问权限。 无法检查另一个指定用户的访问权限。 |
...读取和写入二进制注册表值? |
使用位于“Root\Default”命名空间中的 StdRegProv 类以及 GetBinaryValue 和 SetBinaryValue 方法。 在 RegEdt32 实用工具中显示为一系列字节十六进制值的注册表值采用 REG_BINARY 数据格式。 有关详细信息,请参阅将注册表数据类型映射到 WMI 数据类型。 以下 VBScript 代码示例创建一个使用二进制值的新项。 该二进制值在以十六进制指定的 iValues 字节数组中提供。
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
|
以下脚本读取二进制值。
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
|
$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 类以及 GetMultiStringValue 和 SetMultiStringValue 方法。 在 RegEdt32 实用工具中显示为一系列以空格分隔的字符串的注册表项采用 REG_MULTI_SZ 数据格式。 有关详细信息,请参阅将注册表数据类型映射到 WMI 数据类型。 以下 VBScript 代码示例创建一个新项和一个新的多字符串值。
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
|
$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"}
|
以下脚本读取多字符串值。
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
|
# 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 命名空间中的 StdRegProv 类和 DeleteKey 方法。
$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"}
|
|