Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am in charge of a computer network in a small company (20..30 computers). Recently the need arose to control what kinds of programs our company is using i.e. to collect information that is available when one opens "Add or Remove Programs" in Windows.

I would like to have a program that will collect this kind of information over the network of Windows machines. What is your recommendation?


migration rejected from Feb 24 '14 at 0:34

This question came from our site for professional and enthusiast programmers. Votes, comments, and answers are locked due to the question being closed here, but it may be eligible for editing and reopening on the site where it originated.

closed as off-topic by HopelessN00b, Rex, mdpc, Katherine Villyard, Falcon Momot Feb 24 '14 at 0:34

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking product, service, or learning material recommendations are off-topic because they tend to become obsolete quickly. Instead, describe your situation and the specific problem you're trying to solve." – HopelessN00b, Rex, mdpc, Katherine Villyard
If this question can be reworded to fit the rules in the help center, please edit the question.

This information can be gathered using WMI. There is a "free" program for inventory management called Spiceworks that does a good job. It's got a big community and setup is a breeze.

For an open source solution, you might look at OCSNG and perhaps integrate it with GLPI. I use this combo, but have to warn you that it's clunky and difficult to manage over time. Oh, and it requires a small client application on each desktop since it doesn't use WMI for gathering information (that I'm aware of).


We use a program called Newt to do this. It will scan your network and build an inventory database. One of the tables it creates is the list of installed programs.


I do this via the logon script, which is in VBS. The relevant part of which is:

Set objTS = objFileSystem.OpenTextFile(strLogFile, 2, True)
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputerName & "\root\default:StdRegProv")
oReg.EnumKey &H80000002, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\", arrSubKeys

For Each subKey In arrSubKeys
    strDisplayName = ""
    strDisplayVersion = ""
    On Error Resume Next
    strDisplayName = LCase(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subKey & "\DisplayName"))
    strDisplayVersion = LCase(WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subKey & "\DisplayVersion"))
    On Error Goto 0

    If Left(subKey, 2) = "KB" = 0 And Left(strDisplayName, 18) = "update for windows" = 0 And Instr(strDisplayName, "hotfix") = 0 And len(strDisplayName) > 0 Then
        objTS.WriteLine Now() & vbTab & subKey & ";" & strDisplayName & ";" & strDisplayVersion
    End If

I don't know if you are doing this in order to prevent piracy. If you are, then you might want to consider what you will do if one of your employees purchases a piece of software, has proof of the purchase, then installs it on one of your computers, as covered by the license. Will you prevent him from using software that is properly licensed, or will you simply require proof of license.