Enumerating Programs Installed

How do I use powershell to enumerate all the programs installed on a server?

I want to view all the programs installed, or a particular program and not just view Windows Features installed.

Which version of Windows?

Thank you for the prompt reply.

I have three servers Win 2003, Win 2008 and Win 2012. So I need to know how to enumerate all programs installed on all three.

I particularly need the method for Win 2008.

You can use Win32_Product. That has to be installed on 2003, though - it’s on the original install media. It’s probably the most reliable universal way.

There are disadvantages to using Win32_Product. It only will report MSI installed applications and will start scan and recofiguration of every MSI on the system. See some articles with a quick search “Win32_Product bad”:

http://gregramsey.net/2012/02/20/win32_product-is-evil/
https://sdmsoftware.com/group-policy-blog/wmi/why-win32_product-is-bad-news/

I’ve posted a function to get installed programs using the registry before here:

https://powershell.org/forums/topic/invoking-registry-uninstallstring/#post-25281

If it needs to be adapted for remote use, then you can using remoting and Invoke-Expression or using remote registry methods. It’s quick and clean to pull information.