# Alternatives to Win32\_Product

**URL:** <https://forums.powershell.org/t/alternatives-to-win32-product/1642>\
**Category:** PowerShell Help\
**Created:** [May 21, 2013, 11:15am UTC](https://forums.powershell.org/t/alternatives-to-win32-product/1642 "2013-05-21T11:15:38Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![derek-engel](https://avatars.discourse-cdn.com/v4/letter/d/9f8e36/32.png) [@derek-engel](https://forums.powershell.org/u/derek-engel)\
**Post date:** [May 21, 2013, 11:15am UTC](https://forums.powershell.org/t/alternatives-to-win32-product/1642/1 "2013-05-21T11:15:38Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![poshoholic](https://sea1.discourse-cdn.com/flex019/user_avatar/forums.powershell.org/poshoholic/32/884_2.png) [@poshoholic](https://forums.powershell.org/u/poshoholic)\
**Post date:** [May 21, 2013, 10:58pm UTC](https://forums.powershell.org/t/alternatives-to-win32-product/1642/2 "2013-05-21T22:58:39Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![derek-engel](https://avatars.discourse-cdn.com/v4/letter/d/9f8e36/32.png) [@derek-engel](https://forums.powershell.org/u/derek-engel)\
**Post date:** [May 22, 2013, 1:59am UTC](https://forums.powershell.org/t/alternatives-to-win32-product/1642/3 "2013-05-22T01:59:00Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![david-christian](https://sea1.discourse-cdn.com/flex019/user_avatar/forums.powershell.org/david-christian/32/918_2.png) [@david-christian](https://forums.powershell.org/u/david-christian)\
**Post date:** [May 22, 2013, 3:59am UTC](https://forums.powershell.org/t/alternatives-to-win32-product/1642/4 "2013-05-22T03:59:32Z")

</div>

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:

\<pre class="lang:ps decode:true " \>gp -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | select DisplayName,Publisher,Version,UninstallString

---

<div class="post-metadata">

**Author:** ![poshoholic](https://sea1.discourse-cdn.com/flex019/user_avatar/forums.powershell.org/poshoholic/32/884_2.png) [@poshoholic](https://forums.powershell.org/u/poshoholic)\
**Post date:** [May 22, 2013, 4:46am UTC](https://forums.powershell.org/t/alternatives-to-win32-product/1642/5 "2013-05-22T04:46:43Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![derek-engel](https://avatars.discourse-cdn.com/v4/letter/d/9f8e36/32.png) [@derek-engel](https://forums.powershell.org/u/derek-engel)\
**Post date:** [May 22, 2013, 6:44am UTC](https://forums.powershell.org/t/alternatives-to-win32-product/1642/6 "2013-05-22T06:44:35Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![dotnVo](https://avatars.discourse-cdn.com/v4/letter/d/4af34b/32.png) [@dotnVo](https://forums.powershell.org/u/dotnVo)\
**Post date:** [May 16, 2024, 8:57pm UTC](https://forums.powershell.org/t/alternatives-to-win32-product/1642/7 "2024-05-16T20:57:45Z")

</div>


