#65240 - 2002-05-03 09:42 PM
Hardware Inventory (work in progress, RFC)
|
Sealeopard
KiX Master
   
Registered: 2001-04-25
Posts: 11165
Loc: Boston, MA, USA
|
I'm currently working on a hardware inventory script based on WMI with the ultimate goal to put everything into a database. Right now, I created a WMI property parser that reads the hardware values to be captured from a .INI file. If interested, please comment this idea.
Here's the UDF, the variable '$configfile' must point to the file HARDWAREINVENTORY.INI code:
;FUNCTION HardwareInventory() ; ;ACTION Creates an hardware inventory as a .INI file ; ;AUTHOR Jens Meyer (sealeopard@usa.net) ; ;SYNTAX RETCODE = HARDWAREINVENTORY() ; ;PARAMETERS none ; ;RETURN 0 if successful, otherwise error code ; ;REMARKS requires WMI, hardware inventory is controlled by HARDWAREINVENTORY.INI ; ;DEPENDENCIES WMIQuery() @ http://kixtart.org/cgi-bin/ultimatebb.php?ubb=get_topic;f=12;t=000117 ; BSort() @ http://kixtart.org/cgi-bin/ultimatebb.cgi?ubb=get_topic&f=12&t=000070 ; AVal() @ http://kixtart.org/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=12;t=000192 ; ;EXAMPLE $retcode = HardwareInventory('hardware.ini') ; ;KIXTART BBS ; function HardwareInventory($filename) Dim $retcode, $configfile, $sections, $hardwarecomponent, $hardwareentry, $entries Dim $translate, $discriminator, $wmientry, $entrynumber, $wmientryarray Dim $translatedvalues, $parentarray, $counter, $isparent
$configfile=fullfile($SCRIPTDIRECTORY,'ini/hardwareinventory.ini') $discriminator='_Values'
if not exist($configfile) exit 2 endif
$sections=split(readprofilestring($configfile,'',''),chr(10)) if $sections[ubound($sections)]='' redim preserve $sections[ubound($sections)-1] endif
for each $hardwarecomponent in $sections ? 'Processing hardware component '+$hardwarecomponent
$entries=readprofilestring($configfile,$hardwarecomponent,'') if $entries<>'' $entries=split($entries,chr(10)) if $entries[ubound($entries)]='' redim preserve $entries[ubound($entries)-1] endif $entries=bsort($entries)
redim $translate[0] if ubound($entries)>0 while instr($entries[ubound($entries)],$discriminator) $translate[ubound($translate)]=left($entries[ubound($entries)], len($entries[ubound($entries)])-len($discriminator)) redim preserve $translate[ubound($translate)+1] redim preserve $entries[ubound($entries)-1] loop if ubound($translate)>0 redim preserve $translate[ubound($translate)-1] endif endif $entries=bsort(aval($entries)) if vartype($entries)<8192 $retcode=$entries redim $entries[0] $entries[0]=$retcode endif
$parentarray='' for each $entrynumber in $entries $value=readprofilestring($configfile,$hardwarecomponent,$entrynumber) if instr($value,',') $value=split($value,',') $hardwareentry=trim($value[0]) $format=trim($value[1]) else $hardwareentry=trim($value) $format='' endif $wmientryarray=wmiquery($hardwareentry,$hardwarecomponent)
if vartype($parentarray)<8192 and instr($wmientryarray,'|') $parentarray=split($wmientryarray,'|') $isparent=1 else $isparent=0 endif $wmientryarray=split($wmientryarray,'|') if vartype($parentarray)=>8192 if ubound($wmientryarray)<>ubound($parentarray) redim preserve $wmientryarray[ubound($parentarray)] for $counter=1 to ubound($parentarray) $wmientryarray[$counter]=$wmientryarray[0] next endif endif $counter=0 for each $wmientry in $wmientryarray select case $format='serialnumber' if len($wmientry)=20 $wmientry=''+left($wmientry,5)+'-'+substr($wmientry,6,3)+ '-'+substr($wmientry,10,7)+'-'+right($wmientry,3) endif $wmiformat='' case $format='datetime' $wmientry=''+left($wmientry,4)+'-'+substr($wmientry,5,2)+ '-'+substr($wmientry,7,2)+' '+substr($wmientry,9,2)+':'+substr($wmientry,11,2)+':'+substr($wmientry,13,2) $wmiformat='' case $format='date' $wmientry=''+left($wmientry,4)+'-'+substr($wmientry,5,2)+ '-'+substr($wmientry,7,2) $wmiformat='' case $format='bytes' $wmientry=val($wmientry)/1048576 $wmiformat='MB' case isinarray($hardwareentry,$translate) $translatedvalues=readprofilestring($configfile,$hardwarecomponent,$hardwareentry+$discriminator) $translatedvalues=split($translatedvalues,',') if val($wmientry)<=ubound($translatedvalues) $wmientry=''+$wmientry+' = '+trim($translatedvalues[val($wmientry)]) endif $wmiformat='' case 1 $wmiformat=$format endselect if $wmientry='' $wmientry='n/a' endif $wmientry=trim(''+$wmientry+' '+trim($wmiformat)) $wmientry=$hardwareentry+' - '+$wmientry
if vartype($parentarray)=>8192 if not $isparent $wmientry='parent='+$parentarray[$counter]+' '+$wmientry endif endif
? $wmientry $counter=$counter+1 next next endif next exit @ERROR endfunction
And here's the initialization file: code:
; configuration file for WMI hardware inventory ; ; standard structure for each hardware device: ; [Class Name] ; 0=Property, Format ; Property_Values=value1,value2 ; ; Definitions: ; Class Name = Computer System Hardware Classes according to the WMI documentation ; Property = Property for a specific device class ; Format = optional formatting instructions, e.g. 'datetime' will reformat the property value ; to standard Kixtart date/time format and 'bytes' will reformat the value to 'MB' ; Property_Values = Certain properties return a value that can be translated into a more informative ; string with a look-up table. This field contains the look-up table according to the ; WMI documentation. For example, Win32_Processor.Architecture returns a value between ; 0 and 3. Therefore, the 0-based look-up table contains the corresponding values 'x86, ; MIPS,Alpha,PowerPC' ; ; If multiple values are returned, e.g. for two harddisks, then the first property will become the parent ; property. All properties are being processed according to their number from 0 upwards.
[Win32_OperatingSystem] 0=Caption 1=Manufacturer 2=Version 3=BuildNumber 4=BuildType 5=SerialNumber, serialnumber 6=OSLanguage 7=CSDVersion 8=WindowsDirectory 9=SystemDirectory 10=InstallDate, datetime 11=LastBootupTime, datetime 12=RegisteredUser 13=Organization
[Win32_ComputerSystem] 0=Manufacturer 1=Model
[Win32_BIOS] 0=SerialNumber 1=SMBIOSBIOSVersion 2=Version 3=BiosVersion 4=BuildNumber 5=Manufacturer 6=Name 7=ReleaseDate, date
[Win32_Processor] 0=manufacturer 1=description 2=CurrentClockSpeed, MHz 3=maxclockspeed, MHz 4=l2cachesize, KB 5=l2cachespeed, MHz 6=deviceid 7=uniqueid 8=Family Family_Values=n/a,Other,Unknown,8086,80286,80386,80486,8087,80287,80387,80487, Pentium Family,Pentium Pro,Pentium II,Pentium MMX,Celeron,Pentium II Xeon,Pentium III, M1 Family,M2 Family,K5 Family,K6 Family,K6-2,K6-III,Athlon,Power PC Family,Power PC 601, Power PC 603,Power PC 603+,Power PC 604,Alpha Family,MIPS Family,SPARC Family,68040,6 8xxx Family,68000,68010,68020,68030,Hobbit Family,Weitek,PA-RISC Family,V30 Family, Pentium III Xeon,AS400 Family, IBM390 Family,i860,i960,SH-3,SH-4,ARM,StrongARM,6x86,MediaGX,MII,WinChip
[Win32_LogicalMemoryConfiguration] 0=TotalPhysicalMemory, KB 1=TotalVirtualMemory, KB 2=TotalPageFileSpace, KB
[Win32_PhysicalMemory] 0=BankLabel 1=Capacity, Bytes 2=MemoryType 3=Speed, ns MemoryType_Values=n/a,Unknown,Other,DRAM, Synchronous DRAM,Cache DRAM,EDO,EDRAM,VRAM,SRAM,RAM,ROM,Flash, EEPROM,FEPROM,EPROM,CDRAM,3DRAM,SDRAM,SGRAM
[Win32_DiskDrive] 0=name 1=manufacturer 2=model 3=interfacetype 4=size, Bytes 5=partitions
[Win32_1394Controller] 0=name 1=manufacturer 2=description
Finally, the output for my computer based on the above posted configuration file: code:
Processing hardware component Win32_OperatingSystem Caption - Microsoft Windows 2000 Professional Manufacturer - Microsoft Corporation Version - 5.0.2195 BuildNumber - 2195 BuildType - Uniprocessor Free SerialNumber - xxxxx-xxx-xxxxxx-xxx OSLanguage - 1033 CSDVersion - Service Pack 2 WindowsDirectory - C:\WINNT SystemDirectory - C:\WINNT\System32 InstallDate - 2002-04-10 17:40:44 LastBootupTime - 2002-05-02 13:27:23 RegisteredUser - xxxxx Organization - xxxxx Processing hardware component Win32_ComputerSystem Manufacturer - Gateway Model - MP44BX Processing hardware component Win32_BIOS SerialNumber - 0015587801 SMBIOSBIOSVersion - 4M4PB0X1.15A.0033.P21 Version - PhoenixBIOS 4.0 Release 6.0 BiosVersion - n/a BuildNumber - n/a Manufacturer - Intel Corp. Name - Default System BIOS ReleaseDate - 1999-11-30 Processing hardware component Win32_Processor manufacturer - GenuineIntel description - x86 Family 6 Model 7 Stepping 3 CurrentClockSpeed - 450 MHz maxclockspeed - 1200 MHz l2cachesize - 512 KB l2cachespeed - 225 MHz deviceid - CPU0 uniqueid - 0000-0673-0001-3AB9-7DF8-3226 Family - 17 = Pentium III Processing hardware component Win32_LogicalMemoryConfiguration TotalPhysicalMemory - 196132 KB TotalVirtualMemory - 765816 KB TotalPageFileSpace - 569684 KB Processing hardware component Win32_PhysicalMemory BankLabel - BANK 2 BankLabel - BANK 1 parent=BANK 2 Capacity - 64 MB parent=BANK 1 Capacity - 128 MB parent=BANK 2 MemoryType - 4 = Synchronous DRAM parent=BANK 1 MemoryType - 4 = Synchronous DRAM parent=BANK 2 Speed - n/a ns parent=BANK 1 Speed - n/a ns Processing hardware component Win32_DiskDrive name - \\.\PHYSICALDRIVE1 name - \\.\PHYSICALDRIVE0 parent=\\.\PHYSICALDRIVE1 manufacturer - (Standard disk drives) parent=\\.\PHYSICALDRIVE0 manufacturer - (Standard disk drives) parent=\\.\PHYSICALDRIVE1 model - IOMEGA ZIP 100 parent=\\.\PHYSICALDRIVE0 model - QUANTUM FIREBALL CX13.6A parent=\\.\PHYSICALDRIVE1 interfacetype - IDE parent=\\.\PHYSICALDRIVE0 interfacetype - IDE parent=\\.\PHYSICALDRIVE1 size - n/a MB parent=\\.\PHYSICALDRIVE0 size - 772 MB parent=\\.\PHYSICALDRIVE1 partitions - n/a parent=\\.\PHYSICALDRIVE0 partitions - 2 Processing hardware component Win32_1394Controller name - n/a manufacturer - n/a description - n/a
Remark: Physical harddisk sizes are cureently repoered incorrectly, will be resolved when Kixtart 4.10 is released. The numbers get too big ;-) [ 24 May 2002, 16:35: Message edited by: sealeopard ]
_________________________
There are two types of vessels, submarines and targets.
|
|
Top
|
|
|
|
Hardware Inventory (work in progress, RFC)
|
Sealeopard
|
2002-05-03 09:42 PM
|
Re: Hardware Inventory (work in progress, RFC)
|
Kdyer
|
2002-05-04 12:07 AM
|
Re: Hardware Inventory (work in progress, RFC)
|
Sealeopard
|
2002-05-04 05:02 PM
|
Re: Hardware Inventory (work in progress, RFC)
|
mschipper
|
2002-05-07 04:29 AM
|
Re: Hardware Inventory (work in progress, RFC)
|
Sealeopard
|
2002-05-07 04:43 AM
|
Re: Hardware Inventory (work in progress, RFC)
|
Shawn
|
2002-05-07 05:35 PM
|
Re: Hardware Inventory (work in progress, RFC)
|
Sealeopard
|
2002-05-07 10:03 PM
|
Re: Hardware Inventory (work in progress, RFC)
|
MCA
|
2002-05-23 08:02 PM
|
Re: Hardware Inventory (work in progress, RFC)
|
kholm
|
2002-05-24 02:40 AM
|
Re: Hardware Inventory (work in progress, RFC)
|
Kdyer
|
2002-05-24 03:25 AM
|
Re: Hardware Inventory (work in progress, RFC)
|
kholm
|
2002-05-24 08:29 PM
|
|
Moderator: Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
|
0 registered
and 2220 anonymous users online.
|
|
|