如何从VBScript中的注册表中读取(默认)值?

时间:2012-01-12 18:30:35

标签: windows vbscript

注册表中的

是一个键,它只有(Default)值。此默认条目具有我需要的值。我找到了一个脚本来读取注册表值。

const HKEY_LOCAL_MACHINE = &H80000002
const RegistryLocation   = "SOFTWARE\SAP BusinessObjects\Suite XI 4.0\Xcelsius\Keycodes"

ReadRegistry( RegistryLocation )

Function ReadRegistry( RegistryLocation )

strComputer = "."

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")

oReg.EnumValues HKEY_LOCAL_MACHINE, RegistryLocation, arrValueNames, arrValueTypes

    Wscript.Echo "Key Name: " & arrValueNames(0)
'RegKeyName = arrValueNames(0)

oReg.GetStringValue HKEY_LOCAL_MACHINE, RegistryLocation, arrValueNames(0), strValue
Wscript.Echo "Value: " & strValue
'RegKeyValue = strValue

'ChangeRegistryValue RegistryLocation, arrValueNames(i), NewSerial

End Function 'ReadRegistry

如果有更多键,它可以正常工作。如果仅存在(默认)值,则会出现类型不匹配错误。如果我创建一个新密钥,那么我可以读取默认条目值。

所以我的问题是,我做错了什么,我应该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:0)

当只有一个值为空名的值时,似乎VBScript在获取ValueNames数组时遇到问题。您可以在不枚举值名称的情况下读取默认值 - 只为值名称提供空字符串:

Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.GetStringValue HKEY_LOCAL_MACHINE, RegistryLocation, "", strValue
Wscript.Echo "Value: " & strValue

它适用于两种情况:默认值是唯一的值,当给定键下的值更多时。