How to Get Information About Installed Applications Without Using WMI
Here are three workarounds you can use to get the same information that WMI's Win32_Product class provides. These workarounds get the product information from the registry.
December 25, 2007
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_MACHINESOFTWARE MicrosoftWindowsCurrent-VersionUninstall 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_MACHINESOFTWARE MicrosoftWindowsCurrentVersion 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 HKLMSOFTWARE
MicrosoftWindowsCurrentVersion
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:SOFTWAREMicrosoft
WindowsCurrentVersionUninstall” |
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
MicrosoftWindowsCurrentVersion
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
About the Author
You May Also Like