Author Topic: PC Inventory Script  (Read 4446 times)

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
PC Inventory Script
« on: October 02, 2013, 11:53:53 am »
Pc Inventory Script: Obtains system information into HTML file and optionally displays or emails the results.
http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt%2Ftsleft.web+WinBatch%2FWMI%2FUser%7ESample%7ECode+PC%7EInventory.txt

Code: Winbatch
;***************************************************************************
;**       PC Inventory
;**
;**
;** Purpose: Obtains system information into HTML file and optionally displays or emails the results.
;** Inputs:  SMTP server information as variables
;** Outputs: Optionally displays or emails the results.
;** System Requirements: Postie Extender. WinBatch 2010B or newer. Windows Vista or newer.
;**
;** Revisions: 2013.10.2 Deana Falk
;***************************************************************************
If Version( )< '2010B'
   Pause('Notice', 'Need 2010B or Newer Version of WinBatch')
   Exit
EndIf
ver = WinVersion( 5 )
If ver < "2-6-0"
   Pause('Notice', 'This script is designed for Windows Vista and newer.')
   Exit
EndIf

#DefineFunction udfWMIDataArray( class, properties )
   ParseData( StrReplace( properties, ',', ' ' )  )
   propcount = param0
   arrData = ArrDimension(2, propcount)
   ArrInitialize(arrData, 'NA')
   strComputer = "."
   query = "Select * from " : class
   objWMIService = GetObject("winmgmts:\\" : strComputer : "\root\cimv2")
   colItems = objWMIService.ExecQuery(query)
   instcount = colitems.Count
   instance = 1
   ForEach objItem In colItems
      If ObjectTypeGet(objItem)=="EMPTY" Then Continue
      For i=0 To param0-1
         n = i+1
         propname = param%n%
         arrData[0,i] = propname
         arrData[instance,i] = objItem.%propname%
      Next
      ; Handle multiple instances
      If instcount > instance
         ArrayRedim( arrData, ArrInfo(arrData,1)+1, -1 )
         instance = instance+1
      EndIf
   Next
   Return arrData
#EndFunction

#DefineFunction udfConvertToHTMLTable( arrData )
   rowcount = ArrInfo( arrData, 1 )
   colcount = ArrInfo( arrData, 2 )
   htmlData = '<table width="500" border="1">'
   ;Pause( rowcount, colcount)
   For row = 0 To ArrInfo( arrData, 1 ) - 1
       htmlData = htmlData : '<tr>'
       For col = 0 To ArrInfo( arrData, 2 ) - 1
          htmlData = htmlData : '<td>'
          If ObjectTypeGet( arrData[row,col] ) == 'ARRAY|VARIANT'
              data = udfArrayToList(arrData[row,col],'|')
          Else
              data = arrData[row,col]
          EndIf
          htmlData = htmlData : data
          htmlData = htmlData : '</td>'
       Next
       htmlData = htmlData : '</tr>'
   Next
   htmlData = htmlData : '</table>'
   Return htmlData
#EndFunction


#DefineFunction udfConvertToHTMLTableEx( arrData )
   ; Beautified version of the table
   rowcount = ArrInfo( arrData, 1 )
   colcount = ArrInfo( arrData, 2 )
   htmlData = '<table width="auto" border="1" cellpadding="3" cellspacing="0">'
   ;Pause( rowcount, colcount)
   For row = 0 To ArrInfo( arrData, 1 ) - 1
       ; Alternate Row Color
       If row == 0 ;Heading only
          htmlData = htmlData : '<tr bgcolor="CornflowerBlue">' ; #6495ED
       ElseIf (row mod 2) == 0      ;even numbered row
          htmlData = htmlData : '<tr bgcolor="LightGray">' ;   #D3D3D3
       Else
          htmlData = htmlData : '<tr>'
       EndIf
       For col = 0 To ArrInfo( arrData, 2 ) - 1
                    htmlData = htmlData : '<td align="left">'
          If ObjectTypeGet( arrData[row,col] ) == 'ARRAY|VARIANT'
              data = udfArrayToList(arrData[row,col],'|')
          Else
              data = arrData[row,col]
          EndIf
          htmlData = htmlData : data
          htmlData = htmlData : '</td>'
       Next
       htmlData = htmlData : '</tr>'
   Next
   htmlData = htmlData : '</table>'
   Return htmlData
#EndFunction

#DefineFunction udfArrayToList(arrData,strDelim)
   strData = ''
   count = ArrInfo ( arrData, 1 ) -1
   For ctr = 0 To count
      If ctr < count
         strData=StrCat(strData,arrData[ctr],strDelim)
      Else
         strData=StrCat(strData,arrData[ctr])
      EndIf
   Next
   Return (strData)
#EndFunction

; System Info
computername = ComputerNameGet(0)
username = Environment( 'USERNAME' )
dir = ShortCutDir( 'Personal' ,0 ,1 )

; MODIFY TO FIT YOUR NEEDS
title = 'PC Inventory'
; Email Settings
smtphost = ";mail.dadomain.com"
toaddr = "dauser@dadomain.com"
fromaddr = username : "@dadomain.com"


subject = "Hardware Info for": computername
mymsg="<html><head><title>PC INVENTORY</title></head><body><h1>":subject:"</h1>See attached.</body></html>"
flags="h"
attachment = dir: computername : ".html"




; HTML Output
fh = FileOpen( attachment, "Write")
FileWrite( fh, '<!DOCTYPE html><html><head><title>Hardware Information for computername</title><head><body><h1>':computername:'</h1>' )


heading = 'MotherBoard'
class = 'Win32_BaseBoard'
properties = 'Name,Manufacturer,Product,SerialNumber,Status'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )

heading = 'Battery'
class = 'Win32_Battery'
properties = 'Caption,Name,DesignVoltage,DeviceID,EstimatedChargeRemaining,EstimatedRunTime'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )

heading = 'BIOS'
class = 'Win32_Bios'
properties = 'Manufacturer,Name,BIOSVersion,ListOfLanguages,PrimaryBIOS,ReleaseDate,SMBIOSBIOSVersion,SMBIOSMajorVersion,SMBIOSMinorVersion'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )

heading = 'CDROM Drive'
class = 'Win32_CDROMDrive'
properties = 'Name,Drive,MediaLoaded,MediaType,MfrAssignedRevisionLevel'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )

heading = 'Computer System Product'
class = 'Win32_ComputerSystemProduct'
properties = 'Vendor,Version,Name,IdentifyingNumber,UUID'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )

heading = 'Computer System'
class = 'Win32_ComputerSystem'
properties = 'Name,TotalPhysicalMemory'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )

heading = 'CPU'
class = 'Win32_Processor'
properties = 'Name,Manufacturer,Caption,DeviceID,CurrentClockSpeed,CurrentVoltage,DataWidth,L2CacheSize,L3CacheSize,NumberOfCores,NumberOfLogicalProcessors,Status'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )


heading = 'Disk Drive'
class = 'Win32_DiskDrive'
properties = 'Model,SerialNumber,InterfaceType,Size,Partitions'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )


heading = 'IP Address'
class = 'Win32_NetworkAdapterConfiguration'
properties = 'Description,IPAddress,IPSubnet,DefaultIPGateway,DNSServerSearchOrder,WINSPrimaryServer,DNSDomain,DNSDomainSuffixSearchOrder,DHCPEnabled,DHCPServer,DHCPLeaseObtained,DHCPLeaseExpires'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )


heading = 'Network Adapters'
class = 'Win32_NetworkAdapter'
properties = 'Name,Manufacturer,Description,AdapterType,Speed,MACAddress,NetConnectionID'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )

heading = 'OS'
class = 'Win32_OperatingSystem'
properties = 'Caption,CSDVersion,FreePhysicalMemory'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )


heading = 'Physical Memory'
class = 'Win32_PhysicalMemory'
properties = 'BankLabel,DeviceLocator,Capacity,Manufacturer,PartNumber,SerialNumber,Speed'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )


heading = 'System Enclosure'
class = 'Win32_SystemEnclosure'
properties = 'Tag,AudibleAlarm,ChassisTypes,HeatGeneration,HotSwappable,InstallDate,LockPresent,PoweredOn,PartNumber,SerialNumber'
arrData = udfWMIDataArray( class, properties )
FileWrite( fh, '<h2>':heading:'</h2>' )
FileWrite( fh, udfConvertToHTMLTableEx( arrData ) )


; Finalize HTML
FileWrite( fh, '</body></html>' )
FileClose( fh )


ret = AskYesNo( title, 'Would you like to display the results?' )
If ret
   ; Display Results
   Run( attachment, '' )
EndIf

ret = AskYesNo( title, 'Would you like to EMAIL the results?' )
If ret
   ; EMAIL Results
   AddExtender("WWPST44I.DLL")
   kInit(smtphost,fromaddr,"","","")
   kDest(toaddr,"","")
   ;ret = kSendText(subject,mymsg,attachment,"h")
   ret = kSendFile(subject,attachment,attachment,flags)
   If ret == 0
      errline=kStatusInfo()
      Message("ErrLine",errline)
   EndIf
EndIf

Exit
Deana F.
Technical Support
Wilson WindowWare Inc.

kdmoyers

  • Full Member
  • ***
  • Posts: 183
Re: PC Inventory Script
« Reply #1 on: October 03, 2013, 04:16:09 am »
Cool!
The mind is everything; What you think, you become.

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: PC Inventory Script
« Reply #2 on: October 03, 2013, 09:08:50 am »
Looking for suggestions for any additional information that should be included in the output.....
Deana F.
Technical Support
Wilson WindowWare Inc.

kdmoyers

  • Full Member
  • ***
  • Posts: 183
Re: PC Inventory Script
« Reply #3 on: October 03, 2013, 01:08:21 pm »
I was gonna ask for the dell service tag number, but you already got it!
The mind is everything; What you think, you become.

IJRobson

  • Jr. Member
  • **
  • Posts: 91
Re: PC Inventory Script
« Reply #4 on: October 07, 2013, 07:43:55 am »
I get a script error when I run this Script?

When Scanning the Processor Details it reports:
                 Ole: Unknown name for "arrData[instance,i] = objItem.L3CacheSize"

Thanks

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: PC Inventory Script
« Reply #5 on: October 07, 2013, 08:07:18 am »
I get a script error when I run this Script?

When Scanning the Processor Details it reports:
                 Ole: Unknown name for "arrData[instance,i] = objItem.L3CacheSize"

Thanks

What windows platform are you running on?

On Windows Server 2003 and Windows XP:  This property is not available.: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394373%28v=vs.85%29.aspx
Deana F.
Technical Support
Wilson WindowWare Inc.

IJRobson

  • Jr. Member
  • **
  • Posts: 91
Re: PC Inventory Script
« Reply #6 on: October 07, 2013, 08:37:09 am »
I'm running Windows XP so that explains why it can't find the information.

IJRobson

  • Jr. Member
  • **
  • Posts: 91
Re: PC Inventory Script
« Reply #7 on: October 07, 2013, 10:17:54 am »
When was ArrayRedim() added to WinBatch because I get "Uninitialized variable, undefined function, or unquoted string" on line 41?  I am currently running 2010A.

I also get errors when reading the 'SerialNumber' in the 'Win32_DiskDrive' section so I guess another Windows XP issue?

Thanks

Deana

  • Wilson WindowWare Tech Support
  • Pundit
  • *****
  • Posts: 1183
  • WinBatch® can do it.
    • WinBatch Tech Support Database
Re: PC Inventory Script
« Reply #8 on: October 07, 2013, 10:37:49 am »
ArrayRedim was added in 2010B. I will modify the script to check for this minimum version.
Deana F.
Technical Support
Wilson WindowWare Inc.

IJRobson

  • Jr. Member
  • **
  • Posts: 91
Re: PC Inventory Script
« Reply #9 on: October 07, 2013, 11:16:07 am »
OK thanks