使用VBScript检查是否存在注册表项

MTe*_*eck 12 windows registry vbscript

我认为这很容易,但显然没有人这样做......我正在试图查看是否存在注册表项.我不在乎其中是否有任何值,如(默认).

这就是我一直在尝试的.

Set objRegistry = GetObject("winmgmts:\\.\root\default:StdRegProv")
objRegistry.GetStringValue &H80000003,".DEFAULT\Network","",regValue

If IsEmpty(regValue) Then
    Wscript.Echo "The registry key does not exist."
Else
    Wscript.Echo "The registry key exists."
End If
Run Code Online (Sandbox Code Playgroud)

我只想知道HKEY_USERES\.DEFAULT\.Network是否存在.我在搜索时发现的任何东西似乎都在讨论操纵它们,并且几乎认为密钥确实存在,因为如果它没有,它就会神奇地创建.

MTe*_*eck 10

我找到了解决方案.

dim bExists
ssig="Unable to open registry key"

set wshShell= Wscript.CreateObject("WScript.Shell")
strKey = "HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Digest\"
on error resume next
present = WshShell.RegRead(strKey)
if err.number<>0 then
    if right(strKey,1)="\" then    'strKey is a registry key
        if instr(1,err.description,ssig,1)<>0 then
            bExists=true
        else
            bExists=false
        end if
    else    'strKey is a registry valuename
        bExists=false
    end if
    err.clear
else
    bExists=true
end if
on error goto 0
if bExists=vbFalse then
    wscript.echo strKey & " does not exist."
else
    wscript.echo strKey & " exists."
end if
Run Code Online (Sandbox Code Playgroud)


chr*_*s_k 8

这两种方法中的第二种可以满足您的需求.我刚刚使用它(在这个帖子中找不到成功之后)并且它对我有用.

http://yorch.org/2011/10/two-ways-to-check-if-a-registry-key-exists-using-vbscript/

代码:

Const?HKCR?=?&H80000000?'HKEY_CLASSES_ROOT
Const?HKCU?=?&H80000001?'HKEY_CURRENT_USER
Const?HKLM?=?&H80000002?'HKEY_LOCAL_MACHINE
Const?HKUS?=?&H80000003?'HKEY_USERS
Const?HKCC?=?&H80000005?'HKEY_CURRENT_CONFIG

Function?KeyExists(Key,?KeyPath)
    Dim?oReg: Set?oReg?=?GetObject("winmgmts:!root/default:StdRegProv")
    If?oReg.EnumKey(Key,?KeyPath,?arrSubKeys)?=?0?Then
        KeyExists?=?True
    Else
        KeyExists?=?False
   End?If
End?Function
Run Code Online (Sandbox Code Playgroud)

  • 当我检查它时,该页面仍然有效. (2认同)

Who*_*ich 5

避免RegRead和错误处理技巧的最简单方法.注册表的可选友好协议:

Const?HKEY_CLASSES_ROOT?  =?&H80000000
Const?HKEY_CURRENT_USER?  =?&H80000001
Const?HKEY_LOCAL_MACHINE ?=?&H80000002
Const?HKEY_USERS?         =?&H80000003
Const?HKEY_CURRENT_CONFIG?=?&H80000005
Run Code Online (Sandbox Code Playgroud)

然后检查:

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

If oReg.EnumKey(HKEY_LOCAL_MACHINE, "SYSTEM\Example\Key\", "", "") = 0 Then
  MsgBox "Key Exists"
Else
  MsgBox "Key Not Found"
End If
Run Code Online (Sandbox Code Playgroud)

以上重要说明:

  • 有4个参数传递给EnumKey,而不是通常的3.
  • 等于零意味着关键的EXISTS.
  • 键名后面的斜杠是可选的,不是必需的.