Your boss calls you and says, "Accounting needs a hardware inventory report by the end of the week. Oh, and don't even think about spending money on an inventory software package." What started out as a pleasant day has taken a turn for the worse.
You can manually inventory every computer in your company, you can quit your job, you can claim that the task can't be done—or you can use a two-pronged scripting solution that collects hardware inventory and generates a Microsoft Excel report in record time. This solution—which requires only Windows Management Instrumentation (WMI), Windows Script Host (WSH) 5.6, and Excel 2000 or later—can gather extensive inventory data from Windows Server 2003, Windows XP, Windows 2000, Windows NT 4.0 (Service Pack 4—SP4—or later), Windows Me, and Windows 98 systems.
Preparing for the Inventory
The hardware inventory solution consists of two scripts. The first script, HrdWrInv.vbs, is an inventory agent that collects hardware information from each computer on the network. The second script, BuildReport.vbs, is a report agent that creates an Excel workbook containing hardware inventory data from all the computers on which HrdWrInv.vbs ran successfully. You can download both scripts from http://www.winscriptingsolutions.com, InstantDoc ID 39111.
When the inventory agent runs on a system, the script creates a small text file, typically no larger than 6KB, and names the file HrdWrInv_ComputerName.txt (where ComputerName is the name of the inventoried computer). HrdWrInv.vbs places each file in a directory—which I refer to as the hardware-collection directory—that you specify for the strInvFilePath variable, which appears on line 22 of the script. Make sure that you specify a network path that all users who run the inventory agent can access, and follow the path with a backslash (\). Also, give users Read and Write access to the hardware-collection directory. The default path that I use in HrdWrInv.vbs is \\sea-fs-02\hw\, which points to the hw share on a file server named sea-fs-02; you'll need to replace this path with one suitable to your environment.
You can use a drive letter to specify the path (e.g., G:\inventory\hw), but if you do so, each user needs to map the drive letter to the same network location so that the script will store all the inventory files in the same place. If you specify a Universal Naming Convention (UNC) path, you won't need to worry about whether all users have mapped the drive correctly.
The inventory agent relies on WMI and WSH 5.6. Windows 2003, XP, Win2K, and Windows Me systems install WMI by default; ensure that the WMI Core 1.5 components (which you can download at http://www.microsoft.com/downloads/details.aspx?familyid=afe41f46-e213-4cbf-9c5b-fbf236e0e875) are installed on any NT 4.0 SP4 or later or Win98 clients that will run the script. Windows 2003 and XP systems install WSH 5.6 by default; for Win2K, NT 4.0, Windows Me, and Win98 clients, you can download WSH 5.6 at http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp.
After you prepare the script and machines to run the inventory agent, you need to make the script available over the network. The script is silent and can be called as part of an existing logon-script processing routine. If you support only Win2K or later systems, you can call the agent as part of a Group Policy logon or logoff script-processing procedure. Alternatively, you could modify the inventory agent so that it remotely connects to WMI clients and collects inventory from a central location. To learn about techniques for making remote WMI connections, see "Remote Administration with WMI," February 2003, http://www.winscriptingsolutions.com, InstantDoc ID 37596.
You'll know the agent is doing its job when text files starting with the prefix HrdWrInv_ begin appearing in the hardware-collection directory. (For details about the agent, see the sidebar "How the Inventory Agent Works.") The next time the inventory agent runs on a computer, the agent will detect that it has already taken an inventory and the script will exit. If you want to inventory a computer again, simply delete that system's inventory file from the hardware-collection directory. The next time the agent runs, it will create a new inventory file.
Analyzing the Data
After inventory collection is complete, you can review individual inventory files in Notepad. Each text file contains sections, such as ComputerSystem and IDEController, that represent a characteristic of the inventoried computer. Not every inventory file contains every section, however. For example, if you inventory a computer that contains a SCSI controller but no IDE controller, the corresponding file will contain a SCSIController section but won't contain an IDEController section.
Also, a system's OS version will affect the amount of hardware that the inventory file displays. For example, a Win98 system's inventory file won't contain a PhysicalMedia section because the Win32_PhysicalMedia WMI class is available only on Windows 2003 or XP machines.
Within the available sections, you might notice some items with values listed as Not available. This value occurs when a hardware manufacturer hasn't stored data for a particular WMI property or when WMI can't locate a property's value.
The inventory analysis demonstrates that a computer's OS and hardware components, as well as the properties of each hardware device, create exceptions to uniform inventory collection across all computers. Still, the script will leave you with a rich collection of useful inventory information.
Building the Report
Telling members of the Accounting team that they can go to your hardware-collection directory to view 5000 tiny text files containing the information they want probably won't sit too well with your boss. The next step, then, is to create a hardware inventory report. Enter our trusty report agent, BuildReport.vbs. The report agent reads each file, locates sections of inventory data, then writes the data to individual worksheets in an Excel workbook named InvReport.xls. (For details about how the script works, see the sidebar "How the Report Agent Works," page 4.)
Excel is a good choice for consolidating the inventory data for several reasons. First, Excel is widely available. Second, the application lets you easily create rich reports and analyze collected data. And third, most people who work with inventory reports are familiar with Excel spreadsheet operation and analysis.
Before running the report agent, you must make two minor changes to lines 9 and 10 of BuildReport.vbs. Line 9 contains the strInvFilePath variable and specifies the path to the hardware-collection directory; Line 10 contains the strReportPath variable and specifies the location in which you want the script to create InvReport.xls. Change these values to suit your environment.
Before you run BuildReport.vbs, you need to know three details about the report agent. First, the agent relies on the Excel application object. Therefore, make sure that Excel is installed on the computer on which you'll run the agent.
Second, I intentionally wrote the agent to display a processing message as it parses each inventory file; this regular output assures you that the script is successfully processing the inventory files. (When I ran the agent on a 1GHz Pentium III computer with 512MB of memory, each file required approximately 3 seconds to process.) Because of this output, you must use WSH's CScript host engine to run the script so that the script will continue after it processes each record. If you were to use WSH's WScript host engine, you'd need to click OK each time—a lot of clicking if you have 10,000 inventory files to process. To run the report agent with CScript, either make CScript your default host or open a command prompt, go to the directory that contains the report agent, and type
Third, consider the time the report agent will take to run before you begin the process. If each file takes 3 seconds to process and you have 10,000 files, complete report generation will require 30,000 seconds, or 8.3 hours. Therefore, consider running the report at night and on a fast computer that isn't busy completing other tasks.
Figure 1 shows an example of the output you'll see when the report agent finishes its work. (To show as much data as possible in this figure, I've hidden toolbars and reduced cell width.) The figure shows the Computer Systems worksheet; the workbook includes 14 worksheets in all, one for each section of inventory data: Computer Systems, Page Files, RAM, SCSI Controllers, IDE Controllers, Disk SerNums, Removable Media, Fixed Disks, Processors, NICs, Monitors, Video Adapters, Motherboards, and BIOS. You can modify the inventory agent and report agent scripts to collect more data from each computer if you want.
Inventory in a Nutshell
You now have a lightweight yet verbose inventory-collection and -reporting tool—and for nothing more than a subscription to this newsletter. I hope you, your boss, and the accounting department will all be thrilled.