SideBar    How the Inventory Agent Works, How the Report Agent Works
DOWNLOAD THE CODE:
Download the Code 39111.zip

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.

   Prev. page   [1] 2     next page



You must log on before posting a comment.

If you don't have a username & password, please register now.

Reader Comments

<P>Great article but since the most important part in an inventory is the serial number, is there a way to get the serial number of the PC?<B>--Don</B></P> <P>If you want the serial number look at the IdentifyingNumber property of Win32_ComputerSystemProduct. Works on most computers built since 2001. Older computers may or may not report their serial number.<B>--Bill Schalck, April 19, 2004</B></P>

Don

<P>Great code and just when I needed it!</P>

Martin

<P>When I run the inventory script against my PC, I get this error, which occurs after OSInformation, ComputerSystem, PageFileSetting, and PhysicalMemoryArray have been recorded in the .txt file:</P> <BR> ---------------------------<BR> Windows Script Host<BR> ---------------------------<BR> Script: C:\Documents and <BR> Settings\JeffV\Desktop\Hardware<BR> Inventory\HrdWrInv.vbs<BR> Line: 154<BR> Char: 3<BR> Error: 0x80041001<BR> Code: 80041001<BR> Source: (null)<BR> <BR> ---------------------------<BR> OK<BR> ---------------------------<BR> <BR> <P>The line that errors out is this one in the QueryInstances subroutine:<BR> <BR> <DD>For Each objComponent in objClassName</P>

Jeff

Hi! Just wanted to make a small remark concerning the code:

<P>First HrdWrInv.vbs, line 93 reads:<BR> <BR> If Mid(intVersion,1,3) >= 5.1 Then<BR> <BR> This should read:<BR> <BR> If Mid(intVersion,1,3) >= "5.1" Then<BR> <BR> or the script would not run on my WinXPPro.</P>

<P>Second, in BuildReport.vbs, line 295 reads:<BR> <BR> RenameSheets "Sheet" & i,WBName<BR> <BR> My Norwegian Office calls these sheets "Ark", and this script didn't run either, until I corrected this.</P>

Thomas Hansen

<P>This was very helpful in a bind. Code works well. Easy to read and modify!</P>

Scott

<P>I really enjoyed this article about the hardware inventory. It will probably get lots of use here. I have been looking for this exact code. We've been using a third-party software package for this, but since we've upgraded our security, that package no longer works.</P> <P>I do have a few questions, though: What code should I put in if I want to collect the username on the Computer Systems tab in the Excel report? What needs to go in the hardware script AND what should I put in the report generator?</P>

<P><B>A note from Ethan: </B>The Computer Systems tab is populated with information from the Win32_ComputerSystem class. In this class, there are two additional properties that will probably provide you with what you're looking for: UserName and PrimaryOwnerName.</P>

<P>In hrdwrInv.vbs, you need to add these two properties to the strProperties variable for Win32_ComputerSystem. You'll see the properties listed on lines 64 - 66. In buildReport.vbs, you need to add column heads for the two new properties. The column heads are specified for Win32_ComputerSystem on lines 49 and 50.</P>

Carl Klima

This is going to work well for us. I modified a bit to get the UserName and SerialNumber. Now just to make it automatically run on all computers on the domain......

Craig

<P>I was trying to get the SerialNumber property from the bios and entered the property in Line 133 in HrdWrInv.vbs and added the property on line 97 of the buildReport.vbs. The info is collected in the text file but doesn't show up in the Excel report. Did i omit something?</P>

Jean-Claude

<P>This is great. I have been reading up on the WMI classes and was trying to pull the network settings (ipaddress/DNS/GW, etc) but it always gives me errors. Any thoughts? I would also like to grab some software info. Is there an easy class that has the SW listed in ADD/remove only? What about hotfix/updates? Thanks for the great script!</P>

Bill Prochazka

On Windows 2000 Pro i have got thi error: --------------------------- Windows Script Host --------------------------- Script: C:\Documents and Settings\Tommaso\Desktop\HrdWrInv.vbs Line: 154 Char: 3 Error: 0x80041001 Code: 80041001 Source: (null)

--------------------------- OK ---------------------------

I have already try to update to version 5.6 of scipt engine but i have got it again. What i can do to solve the problem

Tommaso

Great article/script. Straightforward and works great - unlike most resources out there! Ran into the same exact scenario with my accounting department and got all 130 servers and workstations inventoried in 2 days through Group Policy. Thanks for the help.

Rob Wurster

This is most useful. I was able to run the inventory script without error but when I ran the report script the processing inventory box appears but as soon as I press OK I get a script error. Line: 36, Char: 5, Error: File not found, Code: 800a0035. Line 36 only contains comments???

nbk24o8

Article Rating 5 out of 5

Works great, BUT anyone know how to detect the Serial Numbers of disk drives in a RAID? This program detects, "MEGA RAID 5" not enough info!

racer999

Article Rating 4 out of 5

Hi all, When i try to execute the script to colect data about windows 98 machine, this error apears:

The remote server does not exists.... Cod: 800A01CE

PS: Windows2k is ok.

Anonymous User

Not to sound LAZY, but its been a while since I've done any programming and thought I'd ask..even though I am being lazy.

Can someone email me the script with the changes that will collect the username and password?

joe.oldendick@gmail.com

Thanks!

JoeOldendick

See More Comments  1   2