Check software installed on servers

We have a about a hundred - two hundred servers in our infrastructure and I have been assigned the glorious task from "the powers that be.." to see if we have a particular software installed on these servers and which servers it's installed on.

Is there a powershell command or a wmi query which could facilitate this without spending hundreds or thousands on auditing software or so I don't have to actually go through this manually?

Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Mohammed KhawajaManager - Infrastructure:  Information TechnologyCommented:
There is WMI command which can use is:

wmic product list

To run it against a remote computer, you do the following:
wmic /node:remotecomputername product list

I suggest you use a software to get the inventory.  Suggestions are:

SYDI Project    ( and this can create a Excel file with tables, etc.
SpiceWorks (
OCS Inventory ( and this is my favorite
LanSweeper (
I recommend against using that wmic command, which uses the Win32_Product class.  If you search you can find several posts with reasons not to use it.

I recommend any time you need a complete script, first search the Technet Script Gallery.  Here's one that does software inventory.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Greg BessoIT Solutions EngineerCommented:
Hey there,

I run something like the following...

$getProducts = Get-WmiObject Win32_Product -ComputerName $computerName | Select-Object -Property *

You can replace the -Property * with column names once you know what details you want to gather. What I do is run this script from each computer and have it phone home to store the information elsewhere. Or you can run the script centrally from a server that reaches out to each computer on the network. But it's a lot of overhead to keep doing it over and over with most of the information not changing.

I made this thing that installs the script on the individual computers, lets them run it on a schedule and store the output locally to XML. Then it compares the output to the same output from last time. If and only if there was a change found, will it bother to phone home and send the info back.

But that's the starting point, that WMI object.
And again, that references the Win32_Product class.  That really should not be used on production systems.
TomAuthor Commented:
We already use Spiceworks, so i'll use that tool and check out the TechNet Script gallery too

Thanks for all your help!
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Server Software

From novice to tech pro — start learning today.