PowerShell Ezine, Logon Scripts

 

Contact Guy
About Us
Affiliate Program
MCSE Exams
Guy's eBooks
Advice Payment

Guy's Scripting Ezine 63s - Registry Shane's Script

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

  1. Copy and paste the script below into notepad.
  2. Save the file with .vbs extension e.g. ReadSoftware2.vbs
  3. Edit Domain=  " Your Domain "
  4. Edit this line: 
    Set objTextFile2 = objFSO.OpenTextFile("\\YourComputer\Drive$\Folder\" & strFileName, ForWriting,True)
     
  5. 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.

ˇ

Computer Training Software - Recommended Training VideosGuy Thomas recommends Computer Training Software

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.


^


Google
Web  This website

Solarwinds IpMonitorIs Your Server Running Slowly?

Check with SolarWinds ipMonitor

Analyze your network with ipMonitor.  Get a free evaluation copy, and monitor the performance of the servers on your network.
Free Download of SolarWinds ipMonitor