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-Key: 433688

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

Printed on: April 18, 2024 at 05:04 o'clock

Mitglied: 138810
Solution 138810 Mar 28, 2019 updated at 14:49:59 (UTC)
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
Member: Senseless-Creature
Senseless-Creature Mar 28, 2019 at 15:07:46 (UTC)
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?
Mitglied: 138810
Solution 138810 Mar 28, 2019 updated at 15:31:37 (UTC)
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
Member: Senseless-Creature
Senseless-Creature Mar 28, 2019 updated at 16:47:28 (UTC)
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
Mitglied: 138810
Solution 138810 Mar 28, 2019 updated at 16:55:49 (UTC)
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
Member: Senseless-Creature
Senseless-Creature Mar 28, 2019 at 17:00:55 (UTC)
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..
Mitglied: 138810
Solution 138810 Mar 28, 2019 updated at 17:39:28 (UTC)
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 ...