Downloads
97604.zip

Executive Summary:
The standard way to find information about installed applications is to use Windows Management Instrumentation's Win32_Product class, but sometimes that's not possible. For example, a known bug causes Win32_Product inquiries to fail on some Windows Vista systems, and there won't be a fix until Vista SP1 is out. Here are three workarounds you can use to get the same information that Windows Management Instrumentation's Win32_Product class provides on Vista or any other modern Windows OS.

Some Windows Vista systems have Windows Management Instrumentation (WMI) queries of the Win32_Product class fail and provide the less-than-helpful message Generic failure. Repairing WMI typically doesn’t solve the problem. In a Usenet group discussion, Microsoft insider Jeffrey Snover confirms that this is a known bug scheduled for a fix in Vista’s SP1 (see groups.google.com/group/microsoft .public.windows.powershell/browse_thread/thread/a3313bfdeaaca2af/ 66061dcb9ea6578a).

In one post in the discussion, Keith Hill mentions that you can get the same information that the Win32_ Product class provides directly from the registry. The Win32_Product items are all in subkeys under the HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\Windows\Current-Version\Uninstall key. However, Hill doesn’t mention how to extract the data. Depending on what tools you’re comfortable with using and what you need to do, there are a few options for quickly extracting the data. These options aren’t limited to Vista. You can use them on other Windows OSs if you’re having problems with the WMI subsystem.

If you want to save the data in a file for later use, a simple approach is to run regedit, navigate to the HKEY_ LOCAL_MACHINE\SOFTWARE Microsoft\Windows\CurrentVersion Uninstall key, right-click that key, and select Export from the context menu. You can then save the data in a .reg file.

If you want to display the data, you can use command-line tools. One such tool is reg.exe. After opening a command-shell window, run the command

reg query HKLM\SOFTWARE\
Microsoft\Windows\CurrentVersion\
Uninstall /s

(Although this command appears on several lines here, you would enter it on one line. The same holds true for the other multiline commands presented here.)

Another command-line tool you can use is Windows PowerShell. In PowerShell, the simplest way to display the data is to use the Get-ChildItem cmdlet (which has the alias of gci), then pipe its results to the Get-Item- Property cmdlet. (Get-ChildItem doesn’t retrieve information about the registry values contained within subkeys; it only lists the subkeys’ names.) So, the command that you’d enter in the PowerShell window would be

gci “HKLM:\SOFTWARE\Microsoft\
Windows\CurrentVersion\Uninstall” |
ForEach-Object\{Get-ItemProperty
$_.PSPath\}

You can filter the output of this command to make it more readable by piping the output to the Select-Object cmdlet, putting the names of the properties you’re interested in as arguments. For example, here’s how I use Select- Object to get some of the more useful information from the registry keys:

Get-ChildItem HKLM:\SOFTWARE\
Microsoft\Windows\CurrentVersion\
Uninstall | ForEach-Object\{
Get-ItemProperty $_.PSPath\} |
Select-Object DisplayVersion,
InstallDate,ModifyPath,Publisher,
UninstallString,Language,
DisplayName

On the Windows IT Pro Web site, you can download a couple of scripts—GetApplicationUninstall .cmd and Get-ApplicationUninstall .ps1—that automate getting the product information from the Uninstall key. (Go to www.windowsitpro.com/Windows/Article/ArticleID/97604/97604.html and click the Download the Code Here button near the top of the page.) You can run GetApplication- Uninstall.cmd, which uses reg.exe, from a command prompt to display the output from the local machine. If you add the name of a remote machine to the command line, the data will be returned for that remote system. Get-ApplicationUninstall.ps1 is a native PowerShell script that runs only against the local system.

Admittedly, all three workarounds aren’t ideal because they’re just data dumps. However, they at least provide a way to get information about a machine’s installed applications when you can’t use WMI.

See Associated Figure