' =========================================================================================== ' ' 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, "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), "") - 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, "", -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, "") 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, "", 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), "") - 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, "", -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, "", -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