Author Posts

May 21, 2013 at 4:45 pm

I'm curious about what alternatives you use for querying Win32_product via WMI? As per Microsoft this is a bad thing I can ask Google, and I know some alternatives but I'm curious as to what you all do.

So while Get-WmiObject win32_Product is great, it's triggering MSI Installer for every application.

May 22, 2013 at 4:28 am

Can you clarify what you mean by "it's triggering MSI installer for every application", and "as per Microsoft this is a bad thing"? I use Win32_Product and haven't run into any issues with MSI installer.

May 22, 2013 at 7:29 am

Poshoholic,

You bet. On Windows 7 SP1 open Powershell and run this command: Get-WmiObject win32_Product

When finished open your Event Viewer, and go to Application. You should see many messages stating:
Windows Installer reconfigured the product. Product Name: . Product Version: Product Language: . Manufacturer: . Reconfiguration success or error status: 0.

To quote the article I linked:

Win32_product Class is not query optimized. Queries such as “select * from Win32_Product where (name like 'Sniffer%')” require WMI to use the MSI provider to enumerate all of the installed products and then parse the full list sequentially to handle the “where” clause. This process also initiates a consistency check of packages installed, verifying and repairing the install. With an account with only user privileges, as the user account may not have access to quite a few locations, may cause delay in application launch and an event 11708 stating an installation failure.

That would be why it's bad. Initiating a consistency check, verifying, and repairing the install. If this were a server and not a client OS, it could cause big potential problems.

It has been stated, not by Microsoft, that the message is false positive. It does not actually trigger a repair. But, are you willing to gamble that?

May 22, 2013 at 9:29 am

Are you trying to get program information?

I usually enumerate the registry.

Take a look at this key (remove the wow for 32-bit machines):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

Maybe you could do something like this:

gp -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | select DisplayName,Publisher,Version,UninstallString

May 22, 2013 at 10:16 am

Clearly I read your original post too early in the morning, because I had Win32_Process on the brain, not Win32_Product, which totally makes sense now. I'll blame it on the fact that I don't drink coffee or caffeine. 🙂

I don't know of alternatives for Win32_Product though with perhaps the exception of going into the Registry and getting the information on the installed products directly from there.

May 22, 2013 at 12:14 pm

Yup, so far the registry is my only alternative. Which is fine. Just looking for ideas 🙂