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"
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
Learning Points
Note 1: This script has an extra run through the registry keys '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) Note 2: This script has and extra ' Clean Up section' at the end.
Their topics and material are ideal for getting you started with VBScript. The
videos are easy to follow and you can control the pace. Try their free demo material and then see if you want to buy the full package.
See more about VB Script Training CD.
|