senseless-creature
Goto Top

VBScript soll registryeintrag löschen

Hallo Leute, ich übe immer noch das scripten und versuche per VBS einen Registryeintrag zu löschen, falls er vorhanden ist. Gelöscht wird aber nichts - Was mache ich hier falsch?

WshShell.run "Reg Delete " & "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams"  & " /f"  
WshShell.run "Reg Delete " & "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\PastIconsStream"  & " /f"  
WshShell.run "Reg Delete " & "HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams"  & " /f"  
WshShell.run "Reg Delete " & "HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\PastIconsStream"  & " /f"  
WshShell.run "Reg Delete " & "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\IconStreams"  & " /f"  
WshShell.run "Reg Delete " & "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\PastIconsStream"  & " /f"  

Viele Grüße

Content-ID: 433688

Url: https://administrator.de/contentid/433688

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

138810
Lösung 138810 28.03.2019 aktualisiert um 15:49:59 Uhr
Goto Top
Erstens hätte man sich mal die Help-Seite des Befehls reg delete /? angesehen hättest du gesehen das man den Wert separat getrennt vom Pfad (/v Wert) übergibt.

Zweitens löscht man Registry-Keys in VBS überlichweise über die Objekte dies es extra dafür schon gibt ...
On Error Resume Next
Dim strKey, result, objShell
Set objShell = CreateObject("Wscript.Shell")  
strKey = "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams"  
result = objShell.RegRead(strKey)
If Err.Number <> 0 Then
	WScript.Quit 1
End If
objShell.RegDelete strKey
Senseless-Creature
Senseless-Creature 28.03.2019 um 16:07:46 Uhr
Goto Top
Ja, OK - aber was mache ich nun, wenn ich die einzelnen Registry-Einträge nacheinander löschen möchte, aber ein Wert zb nicht existiert - bricht mir in dem Fall dann nicht das Script durch die Zeilen
If Err.Number <> 0 Then
	WScript.Quit 1
alles, was danach kommt ab?
138810
Lösung 138810 28.03.2019 aktualisiert um 16:31:37 Uhr
Goto Top
Ja, OK - aber was mache ich nun, wenn ich die einzelnen Registry-Einträge nacheinander löschen möchte,
Für sowas macht man sich üblicherweise eine Funktion draus oder packt das in eine For-Schleife face-smile.
Set objShell = CreateObject("Wscript.Shell")  
' Array mit zu löschenden Keys  
arrKeys = array("HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams","HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\PastIconsStream")  
' Lösche jeden Key aus dem Array mit der Funktion  
for each key in arrKeys
    DeleteKey key
Next
' Beispielfunktion zum Löschen eines Keys  
Function DeleteKey(strKey)
	On Error Resume Next
	result = objShell.RegRead(strKey)
	If Err.Number <> 0 Then
		DeleteKey = False
		Exit Function
	Else
		objShell.RegDelete strKey
		If Err.Number <> 0 Then
			DeleteKey = False
			Exit Function
		End If
		DeleteKey = True
	End If
End Function
Senseless-Creature
Senseless-Creature 28.03.2019 aktualisiert um 17:47:28 Uhr
Goto Top
OK Danke dafür - jetzt habe ich nur noch ein Problem - sobald ich das Script in ein Sub packe bekomme ich eine Fehlermeldung face-sad
Sub Test
Set objShell = CreateObject("Wscript.Shell")  
' Array mit zu löschenden Keys  
arrKeys = array("HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams","HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\PastIconsStream","HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams","HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\PastIconsStream","HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\IconStreams","HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\PastIconsStream")  
' Lösche jeden Key aus dem Array mit der Funktion  
for each key in arrKeys
    DeleteKey key
Next
' Beispielfunktion zum Löschen eines Keys  
Function DeleteKey(strKey)
	On Error Resume Next
	result = objShell.RegRead(strKey)
	If Err.Number <> 0 Then
		DeleteKey = False
		Exit Function
	Else
		objShell.RegDelete strKey
		If Err.Number <> 0 Then
			DeleteKey = False
			Exit Function
		End If
		DeleteKey = True
	End If
End Function
End Sub
test
138810
Lösung 138810 28.03.2019 aktualisiert um 17:55:49 Uhr
Goto Top
Ja nee, ne Function in ne Sub packen geht nicht face-big-smile.

Set objShell = CreateObject("Wscript.Shell")  
Sub Test
    ' Array mit zu löschenden Keys  
    arrKeys = array("HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams","HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\PastIconsStream","HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams","HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\PastIconsStream","HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\IconStreams","HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify\PastIconsStream")  
    ' Lösche jeden Key aus dem Array mit der Funktion  
    for each key in arrKeys
        DeleteKey key
    Next
End Sub

' Beispielfunktion zum Löschen eines Keys  
Function DeleteKey(strKey)
	On Error Resume Next
	result = objShell.RegRead(strKey)
	If Err.Number <> 0 Then
		DeleteKey = False
		Exit Function
	Else
		objShell.RegDelete strKey
		If Err.Number <> 0 Then
			DeleteKey = False
			Exit Function
		End If
		DeleteKey = True
	End If
End Function

Test
Senseless-Creature
Senseless-Creature 28.03.2019 um 18:00:55 Uhr
Goto Top
ah ok lässt sich das auch anders lösen? ich würde gerne innerhalb verschiedener Sub verschiedene Registryeinträge schreiben und/oder löschen.
Das ganze ist nur ein kleines Projekt für mich um VBS zu verstehen..
138810
Lösung 138810 28.03.2019 aktualisiert um 18:39:28 Uhr
Goto Top
Zitat von @Senseless-Creature:

ah ok lässt sich das auch anders lösen?
Möglichkeiten gibt es viele ...
ich würde gerne innerhalb verschiedener Sub verschiedene Registryeinträge schreiben und/oder löschen.
Kannst du ja machen, die Keys stehen ja im Array. Oder du erweiterst die Function mit einem weiteren Parameter der das Array aufnimmt und dann durchläufst du das Array innerhalb der Function. Dann sparst du extra Subs für ein und die selbe Aufgabe.

Einfach mal hier lesen und lernen
https://www.a-coding-project.de/ratgeber/vbscript/prozeduren-und-funktio ...