Link to home
Start Free TrialLog in
Avatar of gomeara
gomearaFlag for Ireland

asked on

Search registry for string value and delete all entries found using script or other networking tool

I want to search the registry for a given string and delete the registry entries that it finds.
E.g. Search for entries with "\\Servername" and delete all the entries that have this in the key/value.
I have a script that will search for the specified string and displays the results in notepad.
I need to be able to then delete all the entries that I have found automatically without any user intervention.
Using script in GPO or using another tool.
A copy of the script is attached in code section

Option Explicit
Dim oWS : Set oWS = CreateObject("WScript.Shell")
Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
 
Dim sSearchFor
sSearchFor =  "\\Servername"
 
If sSearchFor = "" Then Cleanup()
 
Dim StartTime : StartTime = Timer
 
Dim sRegTmp, sOutTmp, eRegLine, iCnt, sRegKey, aRegFileLines
 
sRegTmp = oWS.Environment("Process")("Temp") & "\RegTmp.tmp "
sOutTmp = oWS.Environment("Process")("Temp") & "\sOutTmp" & _
          Hour(Now) & Minute(Now) & Second(Now) & ".tmp "
 
oWS.Run "regedit /e /a " & sRegTmp, , True '/a enables export as Ansi for WinXP
 
With oFSO.OpenTextFile(sOutTmp, 8, True)
  .WriteLine("REGEDIT4" & vbcrlf & "; " & WScript.ScriptName & " " & _
    Chr(169) & " Bill James" & vbcrlf & vbcrlf & "; Registry search " & _
    "results for string " & Chr(34) & sSearchFor & Chr(34) & " " & Now & _
    vbcrlf & vbcrlf & "; NOTE: This file will be deleted when you close " & _
    "WordPad." & vbcrlf & "; You must manually save this file to a new " & _
    "location if you want to refer to it again later." & vbcrlf & "; (If " & _
    "you save the file with a .reg extension, you can use it to restore " & _
    "any Registry changes you make to these values.)" & vbcrlf)
 
  With oFSO.GetFile(sRegTmp)
    aRegFileLines = Split(.OpenAsTextStream(1, 0).Read(.Size), vbcrlf)
  End With
 
  oFSO.DeleteFile(sRegTmp)
 
  For Each eRegLine in aRegFileLines
    If InStr(1, eRegLine, "[", 1) > 0 Then sRegKey = eRegLine
    If InStr(1, eRegLine, sSearchFor, 1) >  0 Then
      If sRegKey <> eRegLine Then
        .WriteLine(vbcrlf & sRegKey) & vbcrlf & eRegLine
      Else
        .WriteLine(vbcrlf & sRegKey)
      End If
      iCnt = iCnt + 1
    End If
  Next
 
  Erase aRegFileLines
 
  If iCnt < 1 Then
    oWS.Popup "Search completed in " & FormatNumber(Timer - StartTime, 0) & " seconds." & _
              vbcrlf & vbcrlf & "No instances of " & chr(34) & sSearchFor & chr(34) & _
              " found.",, WScript.ScriptName & " " & Chr(169) & " Bill James", 4096
    .Close
    oFSO.DeleteFile(sOutTmp)
    Cleanup()
  End If
  .Close
 
End With
 
oWS.Popup "Search completed in " & FormatNumber(Timer - StartTime, 0) & " seconds." & _
          vbcrlf & vbcrlf & iCnt & " instances of " & chr(34) & sSearchFor & chr(34) & _
          " found." & vbcrlf & vbcrlf & "Click OK to open Results in WordPad.",, _
          WScript.ScriptName & " " & Chr(169) & " Bill James", 4096
 
oWS.Run "Notepad " & sOutTmp, 3, True
 
oFSO.DeleteFile(sOutTmp)
 
Cleanup()
 
Sub Cleanup()
  Set oWS = Nothing
  Set oFSO = Nothing
  WScript.Quit
End Sub

Open in new window

Avatar of RobSampson
RobSampson
Flag of Australia image

Hi, if you could post a sample output file that the above code generates, I'm sure we can just run through a series of "Reg Delete" commands to delete the values...

Regards,

Rob.
Avatar of gomeara

ASKER

Attached is the output file
Output.txt
ASKER CERTIFIED SOLUTION
Avatar of RobSampson
RobSampson
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial