a few days ago my boss liked to see a list of all our computers with the warranty informations like purchase date and warranty end date. So i wrote this little vbscript, witch collect the information from the manufacturers webpage (in our case HP, Dell and Maxdata) and write it to a MIF file.
Please have a look at the script or download it here:
' ===========================================================================================
'
' Script Information
'
' Title: WarrantyInformations.vbs
' Author: Josua Burkard
' Date: 16.11.2011
' Description: get Warranty Informations from HP, Dell, or MaxData Computers
' - writes the information to SCCM MIF file
'
' ===========================================================================================
' ===========================================================================================
' Constants
' ===========================================================================================
Const CREDENTIALS_FOR_SERVER = 0
Const CREDENTIALS_FOR_PROXY = 1
Const HTTPREQUEST_PROXYSETTING_PROXY = 2
Const NETWORK_CONNECTIONS = &H31&
Const ForAppending = 8
Set objShell = CreateObject("Wscript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Const strMifFile = "\WarrantyInfo.mif"
strSerialNumber = GetSerialNumber()
strManufacturer = GetManufacturer()
' ===========================================================================================
' Start Test
' ===========================================================================================
' strSerialNumber = "30326050014"
' strManufacturer = "MAXDATA"
' ===========================================================================================
' End Test
' ===========================================================================================
If strManufacturer = "Hewlett-Packard" OR strManufacturer = "HP" Then
arrWarranty = GetHPWarranty(strSerialNumber)
ElseIf strManufacturer = "Dell Inc." Then
If Left(strSerialNumber, 1) = "." Then
strSerialNumber = GetBiosSerialNumber()
End If
arrWarranty = GetDellWarranty(strSerialNumber)
ElseIf UCase(strManufacturer) = "MAXDATA" Then
arrWarranty = GetMaxdataWarranty(strSerialNumber)
ElseIf Left(UCase(GetBiosVersion()), 6) = "MAXDAT" Then
' Manufacturer is 'MaxData' but Board Information says 'Intel'
strBiosSerialNumber = GetBiosSerialNumber()
arrWarranty = GetMaxdataWarranty(strBiosSerialNumber)
Else
' Other or unknown manufacturer
' GetBiosInfo
Wscript.Quit
End If
' ===========================================================================================
' Write Temp File
' ===========================================================================================
strTempDir = objShell.ExpandEnvironmentStrings("%TEMP%")
If objFSO.FileExists(strTempDir & strMifFile) Then
objFSO.DeleteFile(strTempDir & strMifFile)
End If
Set objMifFile = objFSO.OpenTextFile(strTempDir & strMifFile, ForAppending, True)
objMifFile.Writeline "Start Component"
objMifFile.Writeline " Name = " & Chr(34) & "WORKSTATION" & Chr(34)
objMifFile.Writeline " Start Group"
objMifFile.Writeline " Name = " & Chr(34) & "WarrantyInfo" & Chr(34)
objMifFile.Writeline " ID = 1"
objMifFile.Writeline " Class = " & Chr(34) & "WarrantyInfo" & Chr(34)
objMifFile.Writeline " Start Attribute"
objMifFile.Writeline " Name = " & Chr(34) & "WarrantyBeginn" & Chr(34)
objMifFile.Writeline " ID = 1"
objMifFile.Writeline " ACCESS = READ-ONLY"
objMifFile.Writeline " Storage = Specific"
objMifFile.Writeline " Type = String(100)"
objMifFile.Writeline " Value = " & Chr(34) & arrWarranty(0) & Chr(34)
objMifFile.Writeline " End Attribute"
objMifFile.Writeline " Start Attribute"
objMifFile.Writeline " Name = " & Chr(34) & "WarrantyEnd" & Chr(34)
objMifFile.Writeline " ID = 2"
objMifFile.Writeline " ACCESS = READ-ONLY"
objMifFile.Writeline " Storage = Specific"
objMifFile.Writeline " Type = String(100)"
objMifFile.Writeline " Value = " & Chr(34) & arrWarranty(1) & Chr(34)
objMifFile.Writeline " End Attribute"
objMifFile.Writeline " End Group"
objMifFile.Writeline "End Component"
objMifFile.Close
' ===========================================================================================
' Move Temp file to MIF-directory
' ===========================================================================================
strNoIDMifDir = GetMifFileDirectory()
If objFSO.FileExists(strNoIDMifDir & strMifFile) Then
objFSO.DeleteFile(strNoIDMifDir & strMifFile)
End If
objFSO.CopyFile strTempDir & strMifFile, strNoIDMifDir & strMifFile
Function GetMifFileDirectory()
' ===========================================================================================
' Returns the Directory for SCCM MIF-file
' ===========================================================================================
strWinDir = objShell.ExpandEnvironmentStrings("%WINDIR%")
strComputerName = objShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
strProcessorArchitecture = objShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")
If strProcessorArchitecture = "AMD64" Then
strNoIDMifRegLocation = "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\SMS\Client\Configuration\Client Properties\NOIDMIF Directory"
Else
strNoIDMifRegLocation = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Client\Configuration\Client Properties\NOIDMIF Directory"
End If
GetMifFileDirectory = objShell.RegRead(strNoIDMifRegLocation)
End Function
Function GetMaxdataWarranty(strSN)
' ===========================================================================================
' Returns warranty start date for Maxdata Computers
' ===========================================================================================
Dim arrReturn(1)
strURL = "http://sys.maxdata.de/default.asp?action=query"
strContentFull = HTTPDownload (strURL, "serial=" & strSN, "POST")
intStart = instr(strContentFull, "<span style=" & chr(34) & "margin-left:10px;" & chr(34) & ">Datum:" )
strDate = Left( Right(strContentFull, (Len(strContentFull) - intStart - 38)), 10)
arrReturn(0) = ConvertMaxdataDate(strDate) ' start date
arrReturn(1) = "" ' end date can't recognised for Maxdata Computers
GetMaxdataWarranty = arrReturn
End Function
Function ConvertMaxdataDate(strDate)
' ===========================================================================================
' Convert the date from dd.mm.yyyy to yyyy-mm-dd
' ===========================================================================================
Datearray = split(strDate, ".", -1)
strDay = Datearray(0)
strMonth = Datearray(1)
strYear = Datearray(2)
ConvertMaxdataDate = strYear & "-" & strMonth & "-" & strDay
End Function
Function GetDellWarranty(strSN)
' ===========================================================================================
' Returns warranty dates for Dell Computers
' ===========================================================================================
Dim arrReturn(1)
strURL = "http://support.dell.com/support/topics/global.aspx/support/my_systems_info/details?c=us&l=en&s=gen&~tab=1&ServiceTag="
strContentFull = HTTPDownload (strURL, strSN, "GET")
strContentTable = GetDellContractsTable(strContentFull)
arrRows = GetDellConstracts(strContentTable)
booRowSpan = False
strWarrantyBeginn = ""
strWarrantyEnd = ""
For i = 1 To UBound(arrRows)
arrCells = GetDellConstractsCells (arrRows(i))
strWarrantyTempBeginn = ConvertDellDate(arrCells(2))
If strWarrantyBeginn = "" OR strWarrantyBeginn > strWarrantyTempBeginn Then
strWarrantyBeginn = strWarrantyTempBeginn
End If
strWarrantyTempEnd = ConvertDellDate(arrCells(3))
If strWarrantyEnd = "" OR strWarrantyEnd < strWarrantyTempEnd Then
strWarrantyEnd = strWarrantyTempEnd
End If
Next
arrReturn(0) = strWarrantyBeginn
arrReturn(1) = strWarrantyEnd
GetDellWarranty = arrReturn
End Function
Function GetDellContractsTable(strHTML)
' ===========================================================================================
' Returns the HTML table containing all Dell contracts
' ===========================================================================================
intStart = instr(UCase(strHTML), UCase( "class=" & chr(34) & "contract_table" & chr(34) ))
intStart = instr(intStart, strHTML, ">")
strHTML = Right (strHTML, (Len(strHTML) - intStart))
intEnd = instr(UCase(strHTML), "</TABLE>") - 1
strHTML = Left(strHTML, intEnd)
GetDellContractsTable = strHTML
End Function
Function GetDellConstracts(strHTML)
' ===========================================================================================
' Splits the HTML table to rows containing a single Dell contract
' ===========================================================================================
arrRows = Split(strHTML, "</tr><tr>", -1 , 1)
For Each strRow in arrRows
strRow = RTrim( LTrim(strRow) )
Next
GetDellConstracts = arrRows
End Function
Function GetDellConstractsCells(strHTML)
' ===========================================================================================
' Splits a HTML table row to single cells
' ===========================================================================================
arrCells = Split(strHTML, "</td><td", -1 , 1)
For i = 0 To UBound(arrCells)
intStart = instr(arrCells(i), ">")
arrCells(i) = Right(arrCells(i), (Len(arrCells(i)) - intStart))
Next
GetDellConstractsCells = arrCells
End Function
Function ConvertDellDate(strDate)
' ===========================================================================================
' Convert the date from mm/dd/yyyy to yyyy-mm-dd
' ===========================================================================================
Datearray = split(strDate, "/", -1)
strMonth = Datearray(0)
strDay = Datearray(1)
strYear = Datearray(2)
If Len(strMonth) = 1 Then
strMonth = "0" & strMonth
End If
If Len(strDay) = 1 Then
strDay = "0" & strDay
End If
ConvertDellDate = strYear & "-" & strMonth & "-" & strDay
End Function
Function GetHPWarranty(strSN)
' ===========================================================================================
' Returns warranty dates for HP computers
' ===========================================================================================
Dim arrReturn(1)
strURL = "http://h20000.www2.hp.com/bizsupport/TechSupport/WarrantyResults.jsp?country=US&sn="
strContentFull = HTTPDownload(strURL , strSN, "GET")
strContentTable = GetHPContractsTable(strContentFull)
arrRows = GetHPConstracts(strContentTable)
booRowSpan = False
strWarrantyBeginn = ""
strWarrantyEnd = ""
For i = 1 To UBound(arrRows)
arrCells = GetHPConstractsCells (arrRows(i))
If UBound(arrCells) = 7 OR (booRowSpan = True AND UBound(arrCells) = 6) Then
If booRowSpan = True AND UBound(arrCells) = 6 Then
intFirstCell = 0
Else
intFirstCell = 1
strWarrantyDesc = arrCells(0)
End If
' strServiceType = arrCells (intFirstCell)
strWarrantyTempBeginn = arrCells (intFirstCell + 1)
strWarrantyTempEnd = arrCells (intFirstCell + 2)
' strWarrantyLevel = arrCells (intFirstCell + 4)
' strWarrantyDeliverabled = arrCells (intFirstCell + 5)
strRowSpan = "rowspan=" & chr(34) & "2" & chr(34)
If instr(1, arrCells(0), strRowSpan, 1) > 0 Then
booRowSpan = True
else
booRowSpan = False
End If
strWarrantyTempBeginn = ConvertHPDate(RemoveTDTags(strWarrantyTempBeginn))
If strWarrantyBeginn = "" OR strWarrantyBeginn > strWarrantyTempBeginn Then
strWarrantyBeginn = strWarrantyTempBeginn
End If
strWarrantyTempEnd = ConvertHPDate(RemoveTDTags(strWarrantyTempEnd))
If strWarrantyEnd = "" OR strWarrantyEnd < strWarrantyTempEnd Then
strWarrantyEnd = strWarrantyTempEnd
End If
End If
Next
arrReturn(0) = strWarrantyBeginn
arrReturn(1) = strWarrantyEnd
GetHPWarranty = arrReturn
End Function
Function ConvertHPDate(strDate)
' ===========================================================================================
' Convert the date from d MMM yyyy to yyyy-mm-dd
' ===========================================================================================
strYear = Right(strDate, 4)
Select Case UCase(Right( Left(strDate, 6), 3))
Case "JAN"
strMonth = "01"
Case "FEB"
strMonth = "02"
Case "MAR"
strMonth = "03"
Case "APR"
strMonth = "04"
Case "MAY"
strMonth = "05"
Case "JUN"
strMonth = "06"
Case "JUL"
strMonth = "07"
Case "AUG"
strMonth = "08"
Case "SEP"
strMonth = "09"
Case "OCT"
strMonth = "10"
Case "NOV"
strMonth = "11"
Case "DEC"
strMonth = "12"
End Select
strDay = Left(strDate, 2)
strDate = strYear & "-" & strMonth & "-" & strDay
ConvertHPDate = strDate
End Function
Function RemoveTDTags(strContent)
' ===========================================================================================
' Removes unused HTML tags, tabs and spaces from table cells
' ===========================================================================================
intEnd = instr(1, strContent, "</td>", 1)
If IntEnd > 0 Then
strContent = Left(strContent, (intEnd - 1))
End If
intStart = instr(1, strContent, ">", 1)
If intStart > 0 Then
strContent = Right(strContent, (Len(strContent) - intStart))
End If
strContent = RTrim(LTrim(strContent))
strContent = Replace (strContent, CHR(13), "", 1, -1, 1)
strContent = Replace (strContent, CHR(10), "", 1, -1, 1)
strContent = Replace (strContent, CHR(9), "", 1, -1, 1)
RemoveTDTags = strContent
End Function
Sub GetBiosInfo()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colBIOS = objWMIService.ExecQuery ("Select * from Win32_BIOS")
For each objBIOS in colBIOS
Wscript.Echo "Build Number: " & objBIOS.BuildNumber
Wscript.Echo "Current Language: " & objBIOS.CurrentLanguage
Wscript.Echo "Installable Languages: " & objBIOS.InstallableLanguages
Wscript.Echo "Manufacturer: " & objBIOS.Manufacturer
Wscript.Echo "Name: " & objBIOS.Name
Wscript.Echo "Primary BIOS: " & objBIOS.PrimaryBIOS
Wscript.Echo "Release Date: " & objBIOS.ReleaseDate
Wscript.Echo "Serial Number: " & objBIOS.SerialNumber
Wscript.Echo "SMBIOS Version: " & objBIOS.SMBIOSBIOSVersion
Wscript.Echo "SMBIOS Major Version: " & objBIOS.SMBIOSMajorVersion
Wscript.Echo "SMBIOS Minor Version: " & objBIOS.SMBIOSMinorVersion
Wscript.Echo "SMBIOS Present: " & objBIOS.SMBIOSPresent
Wscript.Echo "Status: " & objBIOS.Status
Wscript.Echo "Version: " & objBIOS.Version
For i = 0 to Ubound(objBIOS.BiosCharacteristics)
Wscript.Echo "BIOS Characteristics: " & objBIOS.BiosCharacteristics(i)
Next
Next
End Sub
Sub GetBoardInfo()
' ===========================================================================================
' Returns the serial number from BIOS
' http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/computermanagement/hardware/
' ===========================================================================================
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
For Each objItem in colItems
Wscript.Echo "Depth: " & objItem.Depth
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "Height: " & objItem.Height
Wscript.Echo "Hosting Board: " & objItem.HostingBoard
Wscript.Echo "Hot Swappable: " & objItem.HotSwappable
Wscript.Echo "Manufacturer: " & objItem.Manufacturer
Wscript.Echo "Model: " & objItem.Model
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "Other Identifying Information: " & objItem.OtherIdentifyingInfo
Wscript.Echo "Part Number: " & objItem.PartNumber
Wscript.Echo "Powered On: " & objItem.PoweredOn
Wscript.Echo "Product: " & objItem.Product
Wscript.Echo "Removable: " & objItem.Removable
Wscript.Echo "Replaceable: " & objItem.Replaceable
Wscript.Echo "Requirements Description: " & objItem.RequirementsDescription
Wscript.Echo "Requires DaughterBoard: " & objItem.RequiresDaughterBoard
Wscript.Echo "Serial Number: " & objItem.SerialNumber
Wscript.Echo "SKU: " & objItem.SKU
Wscript.Echo "Slot Layout: " & objItem.SlotLayout
Wscript.Echo "Special Requirements: " & objItem.SpecialRequirements
Wscript.Echo "Tag: " & objItem.Tag
Wscript.Echo "Version: " & objItem.Version
Wscript.Echo "Weight: " & objItem.Weight
Wscript.Echo "Width: " & objItem.Width
Next
End Sub
Function GetBiosSerialNumber()
' ===========================================================================================
' Returns the serial number from Bios
' http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/computermanagement/hardware/
' ===========================================================================================
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colBIOS = objWMIService.ExecQuery ("Select * from Win32_BIOS")
For each objBIOS in colBIOS
GetBiosSerialNumber = objBIOS.SerialNumber
Next
End Function
Function GetSerialNumber()
' ===========================================================================================
' Returns the serial number from Board
' http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/computermanagement/hardware/
' ===========================================================================================
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
For Each objItem in colItems
GetSerialNumber = objItem.SerialNumber
Next
End Function
Function GetBiosVersion()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colBIOS = objWMIService.ExecQuery ("Select * from Win32_BIOS")
For each objBIOS in colBIOS
GetBiosVersion = objBIOS.Version
Next
End Function
Function GetManufacturer()
' ===========================================================================================
' Returns the manufacturer from BIOS
' http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/computermanagement/hardware/
' ===========================================================================================
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
For Each objItem in colItems
GetManufacturer = objItem.Manufacturer
Next
End Function
Function GetHPContractsTable(strHTML)
' ===========================================================================================
' Returns the HTML table containing all HP contracts
' ===========================================================================================
intStart = instr(UCase(strHTML), UCase("summary=" & chr(34) & "Add summary of the data table" & chr(34) ))
intStart = instr(intStart, strHTML, ">")
strHTML = Right (strHTML, (Len(strHTML) - intStart))
intEnd = instr(UCase(strHTML), "</TABLE>") - 1
strHTML = Left(strHTML, intEnd)
GetHPContractsTable = strHTML
End Function
Function GetHPConstracts(strHTML)
' ===========================================================================================
' Splits the HTML table to rows containing a single HP contract
' ===========================================================================================
arrRows = Split(strHTML, "<tr>", -1 , 1)
For Each strRow in arrRows
strRow = RTrim( LTrim(strRow) )
Next
GetHPConstracts = arrRows
End Function
Function GetHPConstractsCells(strHTML)
' ===========================================================================================
' Splits a HTML table row to single cells
' ===========================================================================================
strHTML = RTrim(LTRim(strHTML))
arrCells = Split(strHTML, "</td>", -1 , 1)
For Each strCell in arrCells
intStart = instr(strCell, ">")
strCell = Right(strCell, (Len(strCell) - intStart))
strCell = RTrim( LTrim(strCell) )
Next
GetHPConstractsCells = arrCells
End Function
Function HTTPDownload(strURL , strParams, strType)
' ===========================================================================================
' Returns html content from a webpage
' ===========================================================================================
Dim i, objHTTP, strContent
' Set objHTTP = CreateObject("Microsoft.XMLHTTP")
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
If GetInternalNetwork = True Then
objHTTP.SetProxy 2, "evswa01.etavis.local:8080"
End If
If strType = "GET" Then
objHTTP.Open "GET", strURL & strParams, False
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send
Else
objHTTP.Open "POST", strURL, False
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send strParams
End If
strContent = objHTTP.responseText
Set objHTTP = Nothing
HTTPDownload = strContent
End Function
Function OldHTTPDownload(strURL , strParams, strType)
' ===========================================================================================
' Returns html content from a webpage
' ===========================================================================================
Dim i, objHTTP, strContent
' Set objHTTP = CreateObject("Microsoft.XMLHTTP")
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
If strType = "GET" Then
objHTTP.Open "GET", strURL & strParams, False
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send
Else
objHTTP.Open "POST", strURL, False
objHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send strParams
End If
strContent = objHTTP.responseText
Set objHTTP = Nothing
HTTPDownload = strContent
End Function
Function GetInternalNetwork
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")
booReturn = False
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
' WScript.Echo IPConfig.IPAddress(i)
If Left(IPConfig.IPAddress(i), 6) = "10.41." Then
booReturn = True
Exit For
End If
Next
End If
Next
GetInternalNetwork = booReturn
End Function
After using this vbscript on each client computer you can create a SCCM report to list the warranty informations.