Enumerating Installed Software

Microsoft® Windows® 2000 Scripting Guide

microsoft windows 2000 scripting guide

« Previous | Next »   

Knowing the software packages that have been installed on a computer is useful for many reasons. Among other things, this knowledge helps you:

  • Gain insight into what the computer is used for. A computer that does not have a word processor installed is probably not used for writing memos or other documents.
  • Ensuring that only licensed software, and only approved software, is in use in your organization. If your organization has decided to standardize on Microsoft Excel, it is very useful, for both support and legal reasons, to know whether anyone has installed a different spreadsheet program on a computer.
  • Tracking the progress of software deployment projects (for example, the number of people who have installed this new application and the number of people who have not).
  • Planning for future software needs.

These activities cannot be carried out using Group Policy because the Software Installation and Maintenance component does not provide information on the software installed on a computer; it only makes that software available for installation. For example, although the Software Installation and Maintenance component can publish a software package, it provides no way to track which users install that package. This makes it difficult to analyze actual software use or to make projections for future software needs.

The WMI Win32_Product class enables you to enumerate the software installed on a computer, provided the software was installed by using the Windows Installer. Selected properties available through the Win32_Product class are shown in Table 8.14.

Table 8.14   Win32_Product Properties

PropertyDescription
CaptionShort description of the object.
DescriptionObject description.
IdentifyingNumberProduct identification, such as a serial number on software.
InstallLocationLocation of the installed product.
InstallStateInstalled state of the product. Values include:

6 Bad configuration

2 Invalid argument

1 Unknown package

1 Advertised

2 Absent

6 Installed

NameCommonly used product name.
PackageCacheLocation of the locally cached package for this product.
SKUNumberProduct SKU (stock-keeping unit) information.
VendorName of the product's supplier.
VersionProduct version information.

Scripting Steps

Listing 8.12 contains a script that enumerates the software installed on a computer and then saves the information to a text file. To carry out this task, the script must perform the following steps:

  1. Create an instance of the FileSystem Object.

    This object will be used to write the retrieved software information to a text file.

  2. Create the text file C:\Scripts\Software.tsv.
  3. Write the field headers to the text file in tab-separated-values format.

    The VBScript constant VbTab is used to insert a tab character between each field header. The tab-separated-values format is used because software property values sometimes contain commas. If they do, these extra commas can make it difficult to parse a text file saved in comma-separated-values format.

  4. Create a variable to specify the computer name.
  5. Use a GetObject call to connect to the WMI namespace root\cimv2, and set the impersonation level to "impersonate."
  6. Use the ExecQuery method to query the Win32_Product class.

    This query returns a collection consisting of all the software products installed on the computer.

  7. For each software product installed on the computer, retrieve the property values for the application and write those values to the text file, separating each value using a tab character.
  8. Close the text file.

Listing 8.12   Enumerating Installed Software

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.CreateTextFile("c:\scripts\software.tsv", True) strComputer = "." Set objWMIService = GetObject("winmgmts:" _     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colSoftware = objWMIService.ExecQuery _     ("SELECT * FROM Win32_Product") objTextFile.WriteLine "Caption" & vbtab & _     "Description" & vbtab & "Identifying Number" & vbtab & _     "Install Date" & vbtab & "Install Location" & vbtab & _     "Install State" & vbtab & "Name" & vbtab & _     "Package Cache" & vbtab & "SKU Number" & vbtab & "Vendor" & vbtab _         & "Version" For Each objSoftware in colSoftware     objTextFile.WriteLine objSoftware.Caption & vbtab & _     objSoftware.Description & vbtab & _     objSoftware.IdentifyingNumber & vbtab & _     objSoftware.InstallLocation & vbtab & _     objSoftware.InstallState & vbtab & _     objSoftware.Name & vbtab & _     objSoftware.PackageCache & vbtab & _     objSoftware.SKUNumber & vbtab & _     objSoftware.Vendor & vbtab & _     objSoftware.Version Next objTextFile.Close

send us your feedback Send us your feedback « Previous | Next »   


Microsoft Windows 2000 Scripting Guide(c) Automating System Administration 2003
Microsoft Windows 2000 Scripting Guide(c) Automating System Administration 2003
ISBN: N/A
EAN: N/A
Year: 2004
Pages: 635

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net