December 1, 2004

Managing hardware inventory and software licensing with open source products

Author: Eduardo Capouya

In small offices and large corporate networks, IT administrators have to manage hardware and software inventory. Keeping track of manufacturers, components, devices, IP addresses, operating systems, installed software, and licenses on an ever-changing company network is time-consuming, and such information is difficult to keep up-to-date. Here are six open source products that can help you manage the task.

I installed the latest version of each product and tested each from the perspective of a typical IT manager. Three of the products -- phpMyInventory, WINventory, and Open Computers and Softwares Inventory -- provide both hardware and software inventory, while the remaining products provide either hardware-only or software-only inventory features.

phpMyInventory v2.81

phpMyInventory is a PHP/MySQL Web application that includes useful features for keeping track of software licenses and hardware inventory in a company. The free open source version lacks some important features available in the commercial edition, such as automatic inventory of Windows PCs, a ticket system, location tracking, reporting, and some user interface improvements.

The product works around four main concepts: users, systems, peripherals, and software.

In the Users area an administrator defines the access level for each user of the software, ranging from users only allowed to view inventory data, all the way to administrators who are allowed to view, edit, and delete information.

The Systems area is the central module of the application. This is where the administrators manage hosts. Administrators define system types by typing system details such as processor, memory, or video adapter. Each system type corresponds to a specific computer model, which comes in handy when there are several systems of the same make and model in an organization. When adding a new system an administrator can just choose the proper system type and all the technical details about that system will be taken from the previously created information. You can add some optional details, such as serial numbers, primary OS, and IP address.

Each system is generally linked to a user and a system type. If a system is not linked to a specific user, you can set it up as a spare system or as an independent system (such as a notebook or a server). Systems have a status that may be set to working, needs service, or in service.

Once you've created a system, you can attach peripherals and software to it. For instance, a system should have at least one software type corresponding to the OS, and three basic peripherals: monitor, keyboard, and pointing device.

Peripherals types have three properties: manufacturer, model, and description. Software types have manufacturer, product name, version, operating system, license type (per user or per system), number of licenses, and a flag for whether the license can be reassigned. The last property, if set to "no," prevents a software type from being moved from one system to another. The number of licenses and the license type are used by the license tracking system to track usage.

Some basic reporting features are available to check for spare or assigned software and peripherals. For example, you can find the number of licenses remaining for an application, and set an alert when there are too many licenses in use.

The open source version of phpMyInventory has a useful pack of features to manage a company's inventory, but some important functions, including automatic inventory of Windows PCs, are available only in the commercial version of the product.

WINventory v0.51

WINventory is a based on Windows Scripting Host (WSH) scripts that use Windows Management Instrumentation (WMI) to recover information about hardware and software on target PCs. It features a PHP/MySQL administration interface to review and work with the recovered information.

In order to run these scripts, all network clients need at least version 5.6 of WSH and WMI installed. To support automatic database updates from clients, you must have a MySQL ODBC connector such as MyODBC v2.5 installed. This works as long as the MySQL account used has no password, but if you plan to use a MySQL account with a password, you can get automatic database updates by using a System Data Source Name. If you don't use ODBC, the WSH script creates SQL scripts that you must run manually to import information into the database using the Administration interface. WINventory also provides an experimental script called audit_domain.vbs that performs a full network scan. The author of the application calls this script unsupported and untested, and indeed my tests of it were unsuccessful.

You can add other items that are not auditable using the provided script, such as printers and scanners, via the administration interface, by typing in the item properties. Available properties include name, IP address, MAC address, manufacturer, model, serial number, physical location, item type, and date and price of purchase. There is also an option to bind an item to a system.

Once you've stored all the information in the database, you can turn to the Web administration interface for a set of features to analyze and report on it. You can query to find systems that match certain criteria; for example, for a particular software product installed, processor speed, amount of RAM, and hard disk size, among others. A statistics module offers information (total count and percent) regarding operating system, Internet Explorer version, physical memory, and processor for all systems in the network.

While still in beta, WINventory is a stable product, and provides most of the features necessary to manage hardware inventory for a company network. One of its main drawbacks is the lack of a software license usage module that allows storing and analyzing information about software licenses purchased versus installed.

Open Computers and Softwares Inventory v3.00 beta 3

Open Computers and Softwares Inventory is the most mature and complete open source product available for hardware and software inventory management. The initial version was a Visual C++ port of another open source project called Visual Basic Stealth Inventory, but in its current state it is a completely different product.

OCS uses Microsoft Access as its default data source, but the product also supports Microsoft SQL Server 7, PostgreSQL 7.2, MySQL 4.1, or higher versions of any of these databases.

OCS uses Microsoft OleDB to access databases. If the inventory agent cannot find OleDB support, it will automatically switch to CSV mode and creates a CSV file that you can later import using the OCS Inventory Manager.

The inventory agent is a Visual C++ executable that can be run from the login script for each user. It supports virtually all Windows client and server operating systems since Windows 95, and an add-on download is available to support Linux clients. It scans the client computer, recovers information regarding installed software, current hardware, and system settings, and stores the results in the central database.

The inventory agent checks only local computers; it cannot check a remote computer. If you want to avoid distributing agents throughout the network, the product documentation suggests you create a hidden network share called INVENTORY$ and add a call to the executable from a logon script. The agent is hard-coded to run only once a day, so even if the computer is rebooted several times during the day, the agent will run only the during the first logon.

The inventory agent needs WMI installed in order to collect information. Hardware information collected includes BIOS (obtained through WMI or BiosInfo tool for Windows 95/98/NT4), processors, memory, input devices, system ports, system slots, system controllers, storage peripherals, logical drives, sound devices, video adapters, display monitors, telephony modems, network adapters, printers, and operating system.

OCS extracts installed software information from uninstall keys in the Windows registry, which is not always accurate and may not correspond exactly to the current software. Optionally, the agent can search the local drives for known software executables, but that process is more time-consuming. You can also set up registry queries to values under HKEY_LOCAL_MACHINE and HKEY_CURRENT_USER from the central management module.

The inventory agent also collects a computer description, primary IP address, user logon with time stamp, and the processes running at logon.

OCS Inventory comes with a Windows graphical user interface called OCS Inventory Manager that lets you view and manage inventory data. In previous versions (2.x) there was a Web interface as well, but as of this writing it was not yet available for version 3.00.

The Inventory Manager has seven main nodes:

  • You set global configuration parameters from the settings node, while you set user information and access permissions from the operators node.
  • The network map node shows domains and workgroups and all inventoried devices in each group. A properties window for each device shows all the information retrieved by the agent organized into categories. From this view, an administrator can force a new inventory for the device, remove the device from the database, or open a remote administration console (if available and previously configured) using Telnet, SSH, VNC, the Web, or Microsoft Terminal Services Client. The property window contains three extra tabs you can use to add information about the device, such as purchase and warranty related data, comments, and repair history information. You can also add new devices that cannot be inventoried by the agent, such as printers, scanners, and hubs. You can link devices to other devices; for instance, you can link a printer or a scanner to the computer to which it is physically connected.
  • The "all device components" node shows the available information from all devices, grouped by the default categories (BIOS, processors, and so on); information for each individual device is also available from the network map node.
  • At the registered licenses node you enter information about the software licenses you've bought, including the number of licenses of specific products and the purchase date.
  • In the licenses compliance node the software compares the licenses found on the inventoried computers against the registered licenses and shows which products have licenses available and which need more to comply with software legalization issues.
  • The search node has a module to search for devices, using several advanced filtering features, and another module to search for computers with or without a particular software product.

In addition to these features, several add-ons that provide extra functionality are available for download, such as a tool for exporting reports to an Excel file, or a Linux shell script to inventory Linux boxes.

OCS Inventory is a complete and stable product, with support for all major operating systems and an excellent management module, and it's 100% open source.

Linux Hardware Inventory v1.1

Linux Hardware Inventory is a Perl script that emulates the functionality of the IRIX hinv tool. It is meant to be run from a shell and provides basic installed hardware information: processor, disk, memory, serial ports, parallel ports, graphics adapter, network adapters, and SCSI and IDE devices.

For installation you need to provide only the path of the Perl executable on your system.

While Linux Hardware Inventory may be a useful tool to discover hardware information about each Linux box at your company, it doesn't provide statistical or analysis tools that help you manage and administer your inventory, and it lacks support for software inventory. This may not be the drawback it might seem at first; software licensing in the Linux world is not as much of a headache as licensing in a Microsoft environment, since a large number of the most common software products for Linux are still released under the GPL or similar licenses.

Poor Man's SMS v1.0.0

Poor Man's SMS is a set of scripts written in JScript for WSH designed to scan a network and build a list of the software installed on each computer. It uses a couple of INI files to configure network parameters such as IP ranges and expected hosts. After its first run, it creates some additional INI files to register hosts that could not be scanned for some reason. For those effectively scanned, it creates a file called InstalledSoftware, on the server from which the script is being run, that contains a plain text list of installed software grouped by computer. The computer running PoorMan's SMS should be at least a Windows 2000 system with WSH 5.6 installed.

In order to run these scripts you must be logged on as an Active Directory domain administrator, or a user who is member of the local administrators group on each computer. The script can gather information from virtually all Windows client and server versions since Windows 95, but clients must have WMI installed and DCOM enabled to allow Poor Man's SMS to recover their information from a remote workstation or server.

The reliability of the information fetched by this script is rather low since it is based on the Uninstall keys stored in the Windows registry under HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Since a user may remove software directly from his hard drive without using the uninstall procedure, several bogus Uninstall keys may remain in the registry, leading Poor Man's SMS to report installed software that no longer exists. Also, many programs do not include uninstall procedures, and thus may reside on the hard drive without having a corresponding Uninstall key.

Poor Man's SMS includes an easy to use installation routine and complete documentation. It lacks an uninstall routine, though the uninstallation process is explained in the documentation and is pretty simple. It lacks several important features that network administrators and IT managers need, such as hardware inventory and a software license compliance module.

PcInventory v0.2.0

PcInventory is a very simple PHP/MySQL Web application for keeping track of hardware inventory and vendors. It's currently still in beta stage.

The product has three main areas: administration, invoices, and items. Under administration you set up users and access permissions, as well as hardware categories, vendors, and locations. You can make new users either administrators, with full access, or normal users, who can only modify existing data. Vendor information is used to add invoices when new hardware is purchased. A scanned image of an invoice can be attached to the invoice in the system for archive purposes. There are three predefined hardware categories -- PC, printer, and scanner. You specify locations when adding hardware items to the inventory in order to define where an item is physically located.

All hardware details must be loaded manually through the Web interface, since PcInventory does not provide a recovery agent that does the job. The software does provide a CSV import feature that allows you to add or modify information related to PCs or items through a specially structured CSV file.

Each item in the inventory stores details such as location, serial numbers, warranty expiry, invoice, IP, MAC address, and network name. Some extra fields are available only for the PC category, including graphics adapter, hard disk, CPU, RAM, and NICs. You may also store a photo of the item.

You install PcInventory the way you do any PHP/MySQL-based Web application: create the database using the provided MySQL dump and modify the configuration script with the correct database parameters (user, pass, host). The installation and usage documentation provided with the product is simple and understandable.

PcInventory is a very basic tool for storing hardware inventory-related information, it lacks software license management capabilities, an automated hardware information recovery agent, and statistical analysis reports.


Given the wide range of functionality and very different features in these six products, which one would work best for your organization? If you run a small 100% Linux-based network and your only concern is to know what hardware devices are installed on each system, undoubtedly Linux Hardware Inventory is your choice. It offers the basics without adding unnecessary features that may just complicate an easy task.

If you run a 100% Microsoft small network and you just want to keep track of installed software, then Poor Man's SMS will do. WINventory is better for keeping track of inventory in midsized to large Microsoft networks, as it provides a seamless automated inventory feature, though it lacks some software licensing-related features.

If you are running a small mixed-platform network and you don't mind having to input and update inventory information manually, you can use either phpMyInventory or PcInventory. phpMyInventory is the better choice, since it provides software license management tools, more powerful reporting features, and a better user interface.

The only product that is really suited for keeping track of hardware and software inventory on small to large corporate networks with mixed Linux and Microsoft systems is Open Computers and Softwares Inventory. It provides an excellent automatic inventory agent and unparalleled reporting, statistical analysis, and software license compliance features that ease the job of network administrators and IT managers. The product is fully open source and has an active community that keeps adding features and add-ons, ensuring future updates and support for the product.

Eduardo Capouya is a freelance writer and software developer who specializes in Web and mobile technologies and application security analysis. He also provides external IT management consulting services to companies and organizations.

Product Name Hardware Inventory Software Inventory Windows clients Linux clients Software licensing compliance Recovery agent
phpMyInventory X X X X * X X **
WINventory X X X X *   X
Open Computers and Softwares Inventory X X X X X X
Linux Hardware Inventory X     X   X
Poor Man's SMS   X X     X
PcInventory X   X X *    

Linux clients are supported only with manual input, the automatic recovery agent
only supports Windows clients.
The Recovery agent is only available in the commercial version of this product.


Click Here!