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