Hi, this is Greg Shields and I'm going to spend a minute showing you how you can inventory installed applications across computers on your network.' You would think that this information would be easy to gather.' If I open up the Control Panel/Programs and Features Control Panel you can see all the different things that have been installed to this computer. Way back in the old days all these applications used to store their information here inside the registry. If I take a look at this registry key ' Software\Microsoft\ Windows\CurrentVersion\Uninstall - this used to be the location I could find pretty much anything that happened to be installed to my computer. Here's that 7-Zip application I referenced in the article. As well as information about its help link, its install source, and the uninstall key that you can use to simply uninstall the application. The problem is that this is only one of the different applications that has been installed to this computer and not all of them are actually found in the uninstall key.
A lot of applications these days are storing their information in other locations such as WMI. I'm going to bring up a tool here called CIM Studio.' It's really one of the oldest tools that still functions to this day. You'll see here that I'm taking a look at the Win32_Product class inside of WMI. Inside of Win32_Product if I take a look at the Instances by clicking this button, I can find all the Instances inside this Win32_Product. Now I can see all those lovely applications that have been installed in my computer. I think I mentioned in the article that you can gather this information using the command line as well, if you do not want to use a tool like CIM Studio.
You can do so here in PowerShell using the gwmi Win32_Product. If I run that command you will see that it brings up all the installations that have been done to this computer. What I really want however, is a way to interrogate all the different computers on my network and not just this local one. I do not want to be going around to all the different computers in my network and then running a command then having to pipe things back into a single location.' So, let me create a file called computers.txt here and I am going to add in the two computer names of the computers on this network: client1 and dc. If I go ahead and save this file I can go ahead and use PowerShell to interrogate all of these computers at once.
The way I go about doing that is with the same command gwmi Win32_Product, but this time I am actually going to look at the different computers on my network. To actually do that I am going to run (Get-Content computers.txt) and have it interrogate that computer I just created. Because I have this in parenthesis it will actually run this part of the command first and then return that command back to the gwmi command. I'm going to pipe that into Out-File and then send that to inventory.txt. I'll let that run for a second and what that is actually going to do is interrogate both of the computers on the network and ultimately give me the information about their inventory. There is all the stuff that is installed on both those computers.
This is just a start; obviously we do not have the names of the computers in here or any of the other surrounding information. It's really not easy for me to import this information into any kind of database, but this gives you a start, with just the free tools, to actually create an inventory solution for all the computers on your network. If you are looking for something that is a little more robust, you might consider a third party tool that automates this entire process for you.