it-swarm.com.de

Überprüfen Sie mit VBScript, ob der Registrierungsschlüssel vorhanden ist

Ich dachte, das wäre einfach, aber anscheinend tut es niemand ... Ich versuche zu sehen, ob ein Registrierungsschlüssel existiert. Es ist mir egal, ob irgendwelche Werte darin enthalten sind, wie (Standard).

Das habe ich versucht.

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

Ich möchte nur wissen, ob HKEY_USERES\.DEFAULT\.Network existiert. Alles, was ich beim Suchen finde, scheint hauptsächlich über deren Manipulation zu sprechen, und nimmt an, dass der Schlüssel existiert, da er magisch erzeugt wird, wenn nicht.

12
MTeck

Ich habe die Lösung gefunden.

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
10
MTeck

Die zweite der beiden Methoden macht, was Sie wollen. Ich habe es gerade benutzt (nachdem ich in diesem Thread keinen Erfolg gefunden hatte) und es hat für mich funktioniert.

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

Der Code:

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
8
chris_k

Einfachste Möglichkeit, RegRead und Fehler beim Umgang mit Fehlern zu vermeiden. Optionale befreundete Consts für die Registrierung:

Const HKEY_CLASSES_ROOT   = &H80000000
Const HKEY_CURRENT_USER   = &H80000001
Const HKEY_LOCAL_MACHINE  = &H80000002
Const HKEY_USERS          = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005

Dann prüfen Sie mit:

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

WICHTIGE HINWEISE FÜR DAS OBEN:

  • Es werden 4 Parameter an EnumKey übergeben, nicht die üblichen 3.
  • Gleich Null bedeutet der Schlüssel EXISTS.
  • Der Schrägstrich hinter dem Schlüsselnamen ist optional und nicht erforderlich.
5
WhoIsRich

Für den Fall, dass jemand anderes darauf stößt, habe ich WhoIsRichs Beispiel genommen und etwas modifiziert. Beim Aufruf von ReadReg musste ich Folgendes tun: ReadReg ("App", "HKEY_CURRENT_USER\App\Version"), das dann die Versionsnummer aus der Registry lesen kann, falls vorhanden. Ich verwende auch HKCU, da zum Schreiben keine Administratorrechte erforderlich sind.

Function ReadReg(RegKey, RegPath)
      Const HKEY_CURRENT_USER = &H80000001
      Dim objRegistry, oReg
      Set objRegistry = CreateObject("Wscript.Shell")
      Set oReg = GetObject("winmgmts:!root\default:StdRegProv")

      if oReg.EnumKey(HKEY_CURRENT_USER, RegKey) = 0 Then
        ReadReg = objRegistry.RegRead(RegPath)
      else
        ReadReg = ""
      end if
End Function
2
Jonathan

Siehe den Scripting Guy! Blog:

Wie kann ich feststellen, ob ein Wert in der Registrierung vorhanden ist?

Sie besprechen die Überprüfung auf einem Remotecomputer und zeigen, dass der Schlüssel nicht vorhanden ist, wenn Sie einen Zeichenfolgenwert aus dem Schlüssel lesen und wenn der Wert Null ist (im Gegensatz zu Empty).

Bezüglich der Verwendung der RegRead-Methode, wenn sich der Begriff "Schlüssel" auf den Pfad (oder Ordner) bezieht, in dem die Registrierungswerte gespeichert werden, und wenn die Blattelemente in diesem Schlüssel "Werte" genannt werden, mithilfe von WshShell.RegRead (strKey) bis Erkennen der Schlüsselexistenz (im Gegensatz zur Wertexistenz) Folgendes berücksichtigen (wie unter Windows XP beobachtet):

Wenn strKey name nicht der Name eines vorhandenen Registrierungspfads ist, liest Err.Description "Ungültiger Stamm im Registrierungsschlüssel" ... mit einer Err.-Nummer von 0x80070002.

Wenn strKey einen Registrierungspfad benennt, der kein nachlaufendes "\" enthält, scheint die RegRead-Methode strKey als Pfad-/Wertreferenz und nicht als einfachen Pfadverweis zu interpretieren, und gibt dieselbe Err.Number zurück, jedoch mit einem Err. Beschreibung von "Registrierungsschlüssel kann nicht geöffnet werden". Der Begriff "Schlüssel" in der Fehlermeldung scheint "Wert" zu bedeuten. Dies ist das gleiche Ergebnis, das erhalten wird, wenn strKey auf einen Pfad\Wert verweist, bei dem der Pfad vorhanden ist, der Wert jedoch nicht vorhanden ist.

0
kbulgrien

edit (Entschuldigung, ich dachte du wolltest VBA).

Immer wenn Sie versuchen, einen nicht vorhandenen Wert aus der Registrierung zu lesen, erhalten Sie einen Nullwert zurück. Sie müssen also nur nach einem Nullwert suchen. 

Verwenden Sie IsNull nicht IsEmpty.

Const HKEY_LOCAL_MACHINE = &H80000002

strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & _ 
    strComputer & "\root\default:StdRegProv")

strKeyPath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
strValueName = "Test Value"
objRegistry.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,strValueName,strValue

If IsNull(strValue) Then
    Wscript.Echo "The registry key does not exist."
Else
    Wscript.Echo "The registry key exists."
End If
0
vulkanino