PowerShell Ezine, Logon Scripts

Guy's Scripting Ezine 63 - Registry Software Info

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


Custom Search

Site Home

Guy Recommends: WMI Monitor and It's Free!Solarwinds WMI Monitor

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft operating systems.

Fortunately, SolarWinds have created the Free WMI Monitor so that you can actually see and understand these gems of operating system information.  Take the guess work out of which WMI counters to use for scripts.

Download your free copy of WMI Monitor

Author: Guy Thomas Copyright © 1999-2016 Computer Performance LTD All rights reserved.

Please report a broken link, or an error to: