Contents for Ezine 63s – Registry Shane’s extra
Here is the full unabridged version of Shane’s script. A reminder that the purpose of the script is to attach to the registry (Via WMI) then read all the "Software\Microsoft\Windows\CurrentVersion\Uninstall"
Shane’s advice – add a second enumeration.
Try a search and then replace which includes the re run the cleaned enumeration section.
‘first enumeration and clean up if errors exists…
For Each objItem in objDictionary2
strKeyPath = objDictionary2.Item(objItem)
objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,unValueName,strValue
objTextFile2.WriteLine (strValue)
If Err Then
objDictionary2.Remove(objItem)
End If
Next
‘re run the cleaned up enumeration…
For Each objItem in objDictionary2
strKeyPath = objDictionary2.Item(objItem)
objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,unValueName,strValue
objTextFile2.WriteLine (strValue)
Instructions
Copy and paste the script below into notepad.
Save the file with .vbs extension e.g. ReadSoftware2.vbs
Edit Domain= " Your Domain "
Edit this line:
Set objTextFile2 = objFSO.OpenTextFile("\\YourComputer\Drive$\Folder\" & strFileName, ForWriting,True)
Double click and then check for the files in the C:\ or C:\folder\
‘set up constants…
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
‘set objects…
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDictionary = CreateObject("Scripting.Dictionary")
Set objDictionary2 = CreateObject("Scripting.Dictionary")
Set wshShell = CreateObject("wscript.shell")
‘get domain PC List…
Domain = "Your Domain Here"
strPCsFile = "DomainPCs.txt"
‘set up domain pc list file…
Set objPCTXTFile = objFSO.OpenTextFile("C:\" & strPCsFile,ForWriting,True)
Set objDomain = GetObject("WinNT://" & Domain)
objDomain.Filter = Array("Computer")
For Each pcObject In objDomain
objPCTXTFile.WriteLine pcObject.Name
Next
objPCTXTFile.close
pcsFile = "DomainPCs.txt"
‘set up reading of domain pc file into 1st dictionary array…
Set readPCFile = objFSO.OpenTextFile("C:\" & pcsFile, ForReading)
i = 0
Do Until readPCFile.AtEndOfStream
strNextLine = readPCFile.Readline
objDictionary.Add i, strNextLine
i = i + 1
Loop
readPCFile.Close
‘create the GetInstalledSoftware Procedure…
Sub GetInstalledSoftware
On Error Resume next
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
strComputer & "\root\default:StdRegProv")
If Err <> "0" Then
Exit Sub
End If
‘registry paths to be enumerated…
unKeyPath = "Software\Microsoft\Windows\CurrentVersion\Uninstall"
unValueName = ("DisplayName")
pcNamePath = "SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\"
pcNameValueName = "ComputerName"
userPath = "Software\Microsoft\Windows NT\CurrentVersion\WinLogon\"
userValueName = "DefaultUserName"
objReg.GetStringValue HKEY_LOCAL_MACHINE,pcNamePath,pcNameValueName,pcValue
objReg.GetStringValue HKEY_LOCAL_MACHINE,userPath,userValueName,userValue
‘enumerate subkey paths in registry for uninstall path…
objReg.EnumKey HKEY_LOCAL_MACHINE, unKeyPath, arrSubKeys
Set objTextFile1 = objFSO.OpenTextFile("C:\UninstallPaths.txt", ForWriting,True)
‘create subkey path to be enumerated…
For Each Subkey in arrSubKeys
objTextFile1.WriteLine (unKeyPath & "\"& subkey & (Enter))
Next
‘set up reading on the uninstalls.txt file…
Set objTextFile3 = objFSO.OpenTextFile("C:\UninstallPaths.txt", ForReading)
‘pipe the uninstall paths from the uninstall.txt file into a second dictionary array…
i = 0
Do Until objTextFile3.AtEndOfStream
strNextLine = objTextFile3.Readline
objDictionary2.Add i, strNextLine
i = i + 1
Loop
‘enumerate each path in the uninstall file…
‘and get the display name of the software then write it to the file…
‘Set Up The File Name
strFileName = UserValue & "_" & "On" & "_" & PCValue & "_" & "Software" & year(date()) & right("0" & month(date()),2) & right("0" & day(date()),2) & ".txt"
‘create each pcs corresponding software info file…
Set objTextFile2 = objFSO.OpenTextFile("\\YourComputer\Drive$\Folder\" & strFileName, ForWriting,True)
‘start writing info to the corresponding Software info file…
objTextFile2.WriteLine(vbCRLF & "—————————————————————————————————–" & vbCRLF & _
"Current Installed Software " & vbCRLF & Time & vbCRLF & Date & vbCRLF & "Software Found For:" & "" & userValue & vbCRLF & "On the following System:" _
& "" & pcValue & vbCRLF & "—————————————————————————————————–" & vbCRLF)
‘first enumeration and clean up if errors exists…
For Each objItem in objDictionary2
strKeyPath = objDictionary2.Item(objItem)
objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,unValueName,strValue
objTextFile2.WriteLine (strValue)
If Err Then
objDictionary2.Remove(objItem)
End If
Next
‘re run the cleaned up enumeration…
For Each objItem in objDictionary2
strKeyPath = objDictionary2.Item(objItem)
objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath,unValueName,strValue
objTextFile2.WriteLine (strValue)
Next
End Sub
‘run the procedure…
For each DomainPC in objDictionary
strComputer = objDictionary.Item(DomainPC)
GetInstalledSoftware
Next
Set objFilesystem = Nothing
wscript.echo "Finished Scanning Network"
‘cleanup the evidence….
objFSO.DeleteFile("C:\UninstallPaths.txt")
objFSO.DeleteFile("C:\DomainPCs.txt")
wscript.Quit
See more about registry scripts
• Registry • Win Registry Hacks •PowerShell Registry • Ezine 8 Registry • Ezines •Tool Kit
• Ezine 62 Registry •Ezine 63 Registry • Ezine 64 Write Registry • Ezine 119 Registry shortcuts
• Ezine 121 CachedLogons • Ezine 136 remove shortcut •Ezine 137 Remove shortcut