Funktion in Hauptscript integrieren
Hallo. Ich habe zwecks Registrymutation einen Script gebastelt. Im Hauptscript wird überprüft, ob ein Flagkey existiert oder nicht. Falls dieser bereits existiert, macht er nix. Falls dieses Flag nicht existiert arbeitet er zwei separate Scripts ab, welche mit Hilfe einer Funktion gewährleisten, dass die gewünschten Keys inkl. Inhalt gelöscht werden. Anschliessend wird das Flag geschrieben. Nun zu meiner Frage. Was muss ich ändern um dies in ein und demselben Hauptscript zu tun? Meine Lösung funktioniert zwar, ist aber nicht wirklich elegant..
Bin für Anregungen dankbar!
Grüsse
' Hauptscript.vbs
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
Set WshShell = WScript.CreateObject("WScript.Shell")
strKeyPath = "SOFTWARE\ApplikationX\LaunchMethods"
strValueName = "Flag"
strValueName1 = "Dummykey"
objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue
If IsNull(strValue) Then
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValueName1
WshShell.run "DEL_KEY1.VBS"
WshShell.run "DEL_KEY2.VBS"
Else
End If
' DEL_KEY1.vbs
Const HKEY_CURRENT_USER = &H80000001
Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")
Set wshNetwork = CreateObject("WScript.Network")
Set wmiNameSpace = wmiLocator.ConnectServer(wshNetwork.ComputerName, "root\default")
Set objRegistry = wmiNameSpace.Get("StdRegProv")
sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB1"
lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)
Function DeleteRegEntry(sHive, sEnumPath)
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
If (lRC <> 0) Then
On Error Resume Next
lRC = objRegistry.EnumKey(HKEY_CURRENT_USER, sEnumPath, sNames)
For Each sKeyName In sNames
If Err.Number <> 0 Then Exit For
lRC = DeleteRegEntry(sHive, sEnumPath & "\" & sKeyName)
Next
On Error Goto 0
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
End If
End Function
' DEL_KEY2.vbs
Const HKEY_CURRENT_USER = &H80000001
Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")
Set wshNetwork = CreateObject("WScript.Network")
Set wmiNameSpace = wmiLocator.ConnectServer(wshNetwork.ComputerName, "root\default")
Set objRegistry = wmiNameSpace.Get("StdRegProv")
sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB2"
lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)
Function DeleteRegEntry(sHive, sEnumPath)
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
If (lRC <> 0) Then
On Error Resume Next
lRC = objRegistry.EnumKey(HKEY_CURRENT_USER, sEnumPath, sNames)
For Each sKeyName In sNames
If Err.Number <> 0 Then Exit For
lRC = DeleteRegEntry(sHive, sEnumPath & "\" & sKeyName)
Next
On Error Goto 0
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
End If
End Function
Bin für Anregungen dankbar!
Grüsse
' Hauptscript.vbs
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
Set WshShell = WScript.CreateObject("WScript.Shell")
strKeyPath = "SOFTWARE\ApplikationX\LaunchMethods"
strValueName = "Flag"
strValueName1 = "Dummykey"
objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue
If IsNull(strValue) Then
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValueName1
WshShell.run "DEL_KEY1.VBS"
WshShell.run "DEL_KEY2.VBS"
Else
End If
' DEL_KEY1.vbs
Const HKEY_CURRENT_USER = &H80000001
Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")
Set wshNetwork = CreateObject("WScript.Network")
Set wmiNameSpace = wmiLocator.ConnectServer(wshNetwork.ComputerName, "root\default")
Set objRegistry = wmiNameSpace.Get("StdRegProv")
sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB1"
lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)
Function DeleteRegEntry(sHive, sEnumPath)
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
If (lRC <> 0) Then
On Error Resume Next
lRC = objRegistry.EnumKey(HKEY_CURRENT_USER, sEnumPath, sNames)
For Each sKeyName In sNames
If Err.Number <> 0 Then Exit For
lRC = DeleteRegEntry(sHive, sEnumPath & "\" & sKeyName)
Next
On Error Goto 0
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
End If
End Function
' DEL_KEY2.vbs
Const HKEY_CURRENT_USER = &H80000001
Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")
Set wshNetwork = CreateObject("WScript.Network")
Set wmiNameSpace = wmiLocator.ConnectServer(wshNetwork.ComputerName, "root\default")
Set objRegistry = wmiNameSpace.Get("StdRegProv")
sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB2"
lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)
Function DeleteRegEntry(sHive, sEnumPath)
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
If (lRC <> 0) Then
On Error Resume Next
lRC = objRegistry.EnumKey(HKEY_CURRENT_USER, sEnumPath, sNames)
For Each sKeyName In sNames
If Err.Number <> 0 Then Exit For
lRC = DeleteRegEntry(sHive, sEnumPath & "\" & sKeyName)
Next
On Error Goto 0
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
End If
End Function
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144187
Url: https://administrator.de/contentid/144187
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo RetroDude!
Sollte sich grundsätzlich etwa so machen lassen:
Eigentlich wäre die Verwendung des Unterprogrammes gar nicht nötig - Du könntest die Zeilen 24 - 34 einfach als Ersatz für den Aufruf in Zeile 18 einfügen ...
Grüße
bastla
P.S.: Falls Dir die von mir verwendete Formatierung für das Script auch besser gefällt: ...
Sollte sich grundsätzlich etwa so machen lassen:
' Hauptscript.vbs
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & _
strComputer & "\root\default:StdRegProv")
Set WshShell = WScript.CreateObject("WScript.Shell")
strKeyPath = "SOFTWARE\ApplikationX\LaunchMethods"
strValueName = "Flag"
strValueName1 = "Dummykey"
objRegistry.GetStringValue HKEY_CURRENT_USER,strKeyPath,strValueName,strValue
If IsNull(strValue) Then
objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValueName1
DEL_KEYS
End If
'#################
Sub DEL_KEYS
Set wmiLocator = CreateObject("WbemScripting.SWbemLocator")
Set wshNetwork = CreateObject("WScript.Network")
Set wmiNameSpace = wmiLocator.ConnectServer(wshNetwork.ComputerName, "root\default")
Set objRegistry = wmiNameSpace.Get("StdRegProv")
sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB1"
lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)
sPath = "SOFTWARE\ApplikationX\LaunchMethods\DB2"
lRC = DeleteRegEntry(HKEY_CURRENT_USER, sPath)
End Sub
'#################
Function DeleteRegEntry(sHive, sEnumPath)
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
If (lRC <> 0) Then
On Error Resume Next
lRC = objRegistry.EnumKey(HKEY_CURRENT_USER, sEnumPath, sNames)
For Each sKeyName In sNames
If Err.Number <> 0 Then Exit For
lRC = DeleteRegEntry(sHive, sEnumPath & "\" & sKeyName)
Next
On Error Goto 0
lRC = objRegistry.DeleteKey(sHive, sEnumPath)
End If
End Function
'#################
Grüße
bastla
P.S.: Falls Dir die von mir verwendete Formatierung für das Script auch besser gefällt: ...