Quantcast
Channel: The Official Scripting Guys Forum! forum
Viewing all articles
Browse latest Browse all 15028

Harvesting asset info and output to CSV

$
0
0

I need a script modified that will run on all servers in a work group in order to gather asset data on the appliances running Windows Server 2000 embedded edition. There are no domain services and these systems and this network technology is not an option in our environment due to proprietary security, networking and infrastructure restrictions. I have found a script that works but i need it modified to output to a csv as it wont output and .xls .xlsx properly. The script will be run on the only computer on the network that can access these devices. Any help on this would be awesome.

               

' *******************************
' Get Windows Server Information
' Written By Kely Mulcahey, E.C.S. LLC.
' Created: March 1, 2006
' Version: 3.0, Revised 5/30/2014
' *******************************

On Error Resume Next
Dim PUBOSVer ' Global OS Version

' Open File For Writing
Set WshNetwork = WScript.CreateObject("WScript.Network")
Const ForReading = 1


' Get Server List
strServerFilename = "servers.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strServerFilename) Then
	' Open Servers File
	Set objServers = objFSO.OpenTextFile(strServerFilename, ForReading)
Else
	' Server File is missing: Exit
	intMsg = MsgBox("File: " & Chr(34) & UCASE(strServerFilename) & Chr(34) & _" is either " & _ "Missing or Damaged!" & vbcrlf & _
				vbcrlf & _"This Script will now Exit.", vbCritical, "Server File Error")
	WScript.Quit(0)
End If


Do Until objServers.AtEndOfStream
   	strNewServer = Trim(objServers.ReadLine)
   	strServerList = strServerList & strNewServer & vbcrlf
    intServerCnt = intServerCnt + 1
Loop


' Enumerate Server Array
For a = 0 To intServerCnt - 1
	strServer = Split(strServerList, vbcrlf)
Next


' ******************************
	
' Create Excel Spreadsheet
Set objXLA = CreateObject("Excel.Application")
objXLA.Visible = False
objXLA.DisplayAlerts = False
Set objWorkbook = objXLA.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

'Excel Constants
Const xlEdgeLeft = 7
Const xlContinuous = 1
Const xlNone = -4142
Const xlMedium = -4138
Const xlThin = 2

		
'Set Headers
' System Information
objXLA.Cells(1,1).Value = "Service ID"
objXLA.Cells(1,2).Value = "Company Name"
objXLA.Cells(1,3).Value = "Manufacturer"
objXLA.Cells(1,4).Value = "Model"
objXLA.Cells(1,5).Value = "Operating System"

' Processors
objXLA.Cells(1,6).Value = "Processor Type"
objXLA.Cells(1,7).Value = "Processors"

' RAM
objXLA.Cells(1,8).Value = "RAM"
objXLA.Cells(1,9).Value = "Slots"
objXLA.Cells(1,10).Value = "Max Capacity"

' Network
objXLA.Cells(1,11).Value = "NIC Port"
objXLA.Cells(1,12).Value = "Speed"
objXLA.Cells(1,13).Value = "Connection Name"
objXLA.Cells(1,14).Value = "Primary IP"
objXLA.Cells(1,15).Value = "Virtual IP"
objXLA.Cells(1,16).Value = "Primary DNS"
objXLA.Cells(1,17).Value = "Secondary DNS"

' Hard Disks
objXLA.Cells(1,18).Value = "Interface"
objXLA.Cells(1,19).Value = "Physical Disks"
objXLA.Cells(1,20).Value = "Disk Size"
objXLA.Cells(1,21).Value = "Fault Tolerant"
objXLA.Cells(1,22).Value = "Hot Spare"

' Set Top Line
objXLA.Cells(1, 1).EntireRow.Font.Bold = True
objXLA.Cells(1, 1).EntireRow.Font.Underline = True


' ******************************


For b = 0 To UBound(strServer) - 1

	strServerParts = Split(strServer(b), " ")

	strComputer = strServerParts(0)

	' Parse Server Information 
	If UBound(strServerParts) = 2 Then
		strUsername = Trim(strServerParts(1))
		strPassword = Trim(strServerParts(2))
	End If


	' Create Connection Object
	Set objWMIService = Nothing
	Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
	Set objWMIService = objSWbemLocator.ConnectServer _
	    (strComputer, "root\cimv2", strUsername, strPassword)
	objWMIServices.Security_.ImpersonationLevel = 3	

	
	' Check if Server Exists
	For intWMICheck = 0 To 15
		If Not objWMIService Is Nothing Then
			Exit For
		Else
			WScript.Sleep(1000)
		End If
	Next


	' Server Exists
	If intWMICheck < 15 Then
		' Get CPU Information			
		Set colProcessor = objWMIService.ExecQuery("SELECT * FROM Win32_Processor")
		For Each colProc In colProcessor
			strManuf = colProc.Manufacturer
			strDescription = ProcessorName(colProc.Name)
			strClockSpeed = colProc.CurrentClockSpeed
			strSocket = strSocket & colProc.SocketDesignation & vbcrlf
			strProcID = strProcID & colProc.ProcessorID & vbcrlf
			strUniqueID = strUniqueID & colProc.UniqueID & vbcrlf
			ProcCount = ProcCount + 1
		Next
		' Determine if Hyperthreading is Enabled
		strHTStatus = GetHTStatus(strSocket, ProcCount, strProcID, strUniqueID)
		' DC / HT Results
		If strHTStatus = "True"	Then
			If InStr(strManuf, "Intel") Then
				strDescription = strDescription & " (Dual Core or H/T)"
			Else
				strDescription = strDescription & " (Dual Core)"
			End If
			ProcCount = ProcCount / 2
		End If
		'--------------
		' Export Information
		Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
		Set colCS = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
		' Write Basic System Information
		For Each objItem in colCS
			Set colOS = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
			For Each objItemOS in colOS
				' Get SP Version
				If objItemOS.CSDVersion <> "" Then
					strSPVersion = objItemOS.CSDVersion
				Else
					strSPVersion = "No Service Packs Installed"
				End If
				If objItemOS.LastBootUpTime <> "" Then
					strLastBoot = DateConvert(objItemOS.LastBootUpTime)
				Else
					strLastBoot = "N/A"
				End If
				' Set OS Version Information
				PUBOSVer = objItemOS.Caption
				objXLA.Cells(b + 2, 1).Value = objItemOS.csname
				objXLA.Cells(b + 2, 3).Value = objItem.Manufacturer
				objXLA.Cells(b + 2, 4).Value = objItem.Model
				objXLA.Cells(b + 2, 5).Value = PUBOSVer & " - " & strSPVersion
				objXLA.Cells(b + 2, 6).Value = strDescription
				objXLA.Cells(b + 2, 7).Value = ProcCount
				objXLA.Cells(b + 2, 8).Value = MemoryConvert(objItem.TotalPhysicalMemory)				
			Next
		Next
		' Get Memory Breakdown
		Dim strMemBreak
		strMemBreak = Split(MemoryBreakdown(), vbcrlf)
		n = 0
		For n = 0 To UBound(strMemBreak) - 1
			strSlots = strSlots & strMemBreak(n) & Chr(10)
		Next
		strMaxCapacity = strMemBreak(UBound(strMemBreak))
		objXLA.Cells(b + 2, 9).Value =  Left(strSlots, Len(strSlots) - 1)
		objXLA.Cells(b + 2, 10).Value =  strMaxCapacity
		' Dispose
		strMemBreak = ""
		strMaxCapacity = ""
		strSlots = ""
		'--------------Computer Information (End)------------------'
		'-------------Partition Information (Start)----------------'
		' Get Drive Count
		Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
		Set DiskItemsParent = objWMIService.ExecQuery("Select * from Win32_DiskDrive")
		intCount = DiskItemsParent.Count
		' Process Drives
		intDriveMark = 0
		For i = 0 To intCount - 1
			Set DiskItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive WHERE Index = " & i)
			For Each diskItem in DiskItems
				' Convert Drive Size
				If diskItem.Size <> "" Then strSize = strSize & ByteConvert(diskItem.Size) & Chr(10) Else strSize = "N/A" & Chr(10)
				If diskItem.StatusInfo <> "" Then strStsInfo = diskItem.StatusInfo Else strStsInfo = "N/A"
				If diskItem.SCSIBus <> "" Then strSCSIBus = diskItem.SCSIBus Else strSCSIBus = "N/A"
				If diskItem.SCSILogicalUnit <> "" Then strSCSILog = diskItem.SCSILogicalUnit Else strSCSILog = "N/A"
				If diskItem.SCSIPort <> "" Then strSCSIPort = diskItem.SCSIPort Else strSCSIPort = "N/A"
				If diskItem.SCSITargetId <> "" Then strSCSITarget = diskItem.SCSITargetId Else strSCSITarget = "N/A"
				' Get Model
				strModel = Split(diskItem.Model, " ")
				' Detect HP Array
				If (UCase(strModel(0)) = "HP" Or UCase(strModel(0)) = "COMPAQ") And intDriveMark = 0 Then
					strGetHPArray = GetHPArray(strComputer, strUsername, strPassword)
					If strGetHPArray <> "" Then
						strSplitHP = Split(strGetHPArray, Chr(13))
						For a = 0 To UBound(strSplitHP)
							strSplitResult = Split(strSplitHP(a), ":")
							i = i + 1
							strDriveCount = strDriveCount & Trim(strSplitResult(0)) & Chr(10)
							strDriveSize = strDriveSize & Trim(strSplitResult(1)) & Chr(10)
							strDriveFault = strDriveFault & Trim(strSplitResult(2)) & Chr(10)
							strDriveSpare = strDriveSpare & Trim(strSplitResult(3)) & Chr(10)
							strInterface = strInterface & "HP SCSI" & Chr(10)							
						Next
						' Set Controller Output
						objXLA.Cells(b + 2, 19).Value = Trim(Left(strDriveCount, Len(strDriveCount) - 1))
						objXLA.Cells(b + 2, 20).Value = Trim(Left(strDriveSize, Len(strDriveSize) - 1))
						objXLA.Cells(b + 2, 21).Value = Trim(Left(strDriveFault, Len(strDriveFault) - 1))
						objXLA.Cells(b + 2, 22).Value = Trim(Left(strDriveSpare, Len(strDriveSpare) - 1))
						intDriveMark = 1 ' Mark That Data was Obtained
					Else
						strDriveCount = strDriveCount & "1" & Chr(10)
						strDriveSize = strDriveSize & strSize & Chr(10)
						strDriveFault = strDriveFault & "N/A" & Chr(10)
						strDriveSpare = strDriveSpare & "N/A" & Chr(10)
						strInterface = strInterface & "HP SCSI " & Chr(10)
						' Set Controller Output
						intDriveMark = 1 ' Mark That Another Pass is Invalid
						' Set Controller Output
						objXLA.Cells(b + 2, 19).Value = Trim(Left(strDriveCount, Len(strDriveCount) - 1))
						objXLA.Cells(b + 2, 20).Value = Trim(Left(strDriveSize, Len(strDriveSize) - 1))
						objXLA.Cells(b + 2, 21).Value = Trim(Left(strDriveFault, Len(strDriveFault) - 1))
						objXLA.Cells(b + 2, 22).Value = Trim(Left(strDriveSpare, Len(strDriveSpare) - 1))
					End If
				Else
					strDriveCount = strDriveCount & "1" & Chr(10)
					strDriveSize = strDriveSize & strSize & Chr(10)
					strDriveFault = strDriveFault & "N/A" & Chr(10)
					strDriveSpare = strDriveSpare & "N/A" & Chr(10)
					' Set Controller Output
					intDriveMark = 1 ' Mark That Another Pass is Invalid
					' Set Controller Output
					objXLA.Cells(b + 2, 19).Value = Trim(Left(strDriveCount, Len(strDriveCount) - 1))
					objXLA.Cells(b + 2, 20).Value = Trim(Left(strDriveSize, Len(strDriveSize) - 1))	
					objXLA.Cells(b + 2, 21).Value = Trim(Left(strDriveFault, Len(strDriveFault) - 1))
					objXLA.Cells(b + 2, 22).Value = Trim(Left(strDriveSpare, Len(strDriveSpare) - 1))
					' Set Interface
					If diskItem.InterfaceType = "IDE" Then
						strInterface = strInterface & "ATA" & Chr(10)						
					Else
						strInterface = strInterface & "SATA/SCSI" & Chr(10)
					End If			
				End If
				' Set Cell Value "Interface"
				objXLA.Cells(b + 2, 18).Value = Left(strInterface, Len(strInterface) - 1)
			Next
			' Dispose Drive Sizes
			strDriveSize = ""
		Next
		' Dispose Drive Values
		strDriveCount = ""
		strDriveFault = ""
		strDriveSpare = ""
		strInterface = ""
		'----Partition Information (End)---------------------------'
		'----Network Information (Start)---------------------------'
		Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter")
		i = 1
		eth = 0
		Dim STOREDIP(0)
		intNum = 0
		For Each objItem in colItems
			If objItem.NetConnectionStatus <> "" Then
				' Determine Connection Status
				If objItem.NetConnectionStatus = 0 Then
					strNetStat = "Disabled"
				ElseIf objItem.NetConnectionStatus = 2 Then
					strNetStat = "Connected"
				ElseIf objItem.NetConnectionStatus = 7 Then
					strNetStat = "Disconnected"
				Else
					strNetStat = "Unknown"
				End If
				If objItem.NetConnectionStatus <> 0 Then
					' Get Network Card Information
					Const HKEY_LOCAL_MACHINE = &H80000002
					strKeyPath1 = "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"
					strKeyPath2 = "SYSTEM\CurrentControlSet\Services\NetBT\Parameters"
					strHostEntry = "Hostname"
					strDomainEntry = "Domain"
					strNodeEntry = "DhcpNodeType"
					strRoutingEntry = "IPEnableRouter"
					Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		 				strComputer & "\root\default:StdRegProv")
					objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,strHostEntry,strHostname
					objReg.GetStringValue HKEY_LOCAL_MACHINE,strKeyPath1,strDomainEntry,strDomain
					objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath2,strNodeEntry,dwNodeType
					objReg.GetDWORDValue HKEY_LOCAL_MACHINE,strKeyPath1,strRoutingEntry,dwIPRouting
					Select Case dwNodeType
			  			Case 4 strNodeType = "Mixed"
		  				Case 8 strNodeType = "Hybrid"
		  				Case Else strNodeType = dwNodeType
					End Select
					If dwIPRouting = 0 Then
		  				strIPRouting = "No"
					ElseIf dwIPRouting = 1 Then
			  			strIPRouting = "Yes"
					Else
			  			strIPRouting = "?"
					End If
					Set colFirstNicConfig = objWMIService.ExecQuery _
		 				("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
					For Each objFirstNicConfig In colFirstNicConfig
		  				strDnsWins = objFirstNicConfig.DNSEnabledForWINSResolution
					Next
					Set colNicConfigs = objWMIService.ExecQuery _
			  			("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
					' Display per-adapter settings.	
					For Each objNicConfig In colNicConfigs
			  			intIndex = objNicConfig.Index
		 				Set objNic = objWMIService.Get("Win32_NetworkAdapter.DeviceID=" & intIndex)
		  				' Connection Name
		  				If GetOsVer > 5 Then
		  					' Works only in XP / 2003
			    			strNetConn = objNic.NetConnectionID				
		  				ElseIf GetOsVer = 5 Then
							strNetConn = ""
		  					' Get Home Drive of Remote Server
							Set objShell = CreateObject("WScript.Shell")
							Set objEtherName = objShell.Exec("cmd /c ipconfig | find " & Chr(34) & "Ethernet" & Chr(34))
							strEtherName = objEtherName.StdOut.ReadAll()					
							strEtherParse = Split(strEtherName, Chr(13))
		    				strEtherConn = Split(strEtherParse(eth), " ")
		    				For y = 2 To UBound(strEtherConn)
		    					strNetConn = strNetConn & " " & strEtherConn(y)
		    				Next
		    				' Trim Connection Name
		    				strNetConn = Left(Trim(strNetConn), Len(Trim(strNetConn)) - 1)
		    			Else
		    				strNetConn = ""
						End If
		 				' IP Addresses
		  				strIPAddresses = ""
		  				If Not IsNull(objNicConfig.IPAddress) Then
		  	    			For Each strIPAddress In objNicConfig.IPAddress
		      					strIPAddresses = strIPAddresses & strIPAddress & " "
		    				Next
		  				End If
		  				strIPCollection = Split(strIPAddresses, " ")
		  				' Subnets
						strIPSubnets = ""
		  				If Not IsNull(objNicConfig.IPSubnet) Then
		    				For Each strIPSubnet In objNicConfig.IPSubnet
			      				strIPSubnets = strIPSubnets & strIPSubnet & " "
		    				Next
		  				End If
		  				strSMCollection = Split(strIPSubnets, " ")
		  				' Virtual IP's  	
		  				strVirtual = ""
		  				If UBound(strIPCollection) > 1 Then
							For IPCount = 1 To UBound(strIPCollection) - 1
								strVirtual = strVirtual & (strIPCollection(IPCount) & " / " & strSMCollection(IPCount)) & Chr(10)
							Next
							strVirtual = Left(strVirtual, Len(strVirtual) - 1)					
						End If
						If Trim(strVirtual) = "" Then strVirtual = "N/A"
		  				' Gateways
		  				strDefaultIPGateways = ""
		  				If Not IsNull(objNicConfig.DefaultIPGateway) Then
		    				For Each strDefaultIPGateway In objNicConfig.DefaultIPGateway
		      					strDefaultIPGateways = strDefaultIPGateways & strDefaultIPGateway & " "
			    			Next
			    		Else
			    			strDefaultIPGateways = "N/A"
		  				End If
		  				'--------------------------------------
		  				' If IP is repeated, and was already reported.
		  				intSkipLoop = 0
		  				If Trim(strNetConn) <> "" Then
		  					For j = 0 To intNum - 1
		  						If STOREDIP(j) = strIPAddresses Then
									intSkipLoop = 1
		  							Exit For
		  						End If
		  					Next
				  			If intSkipLoop = 0 Then
								ReDim Preserve STOREDIP(intNum)
								STOREDIP(intNum) = strIPAddresses	
								intNum = intNum + 1  				
			  				End If
			  			Else
			  				intSkipLoop = 1
			  			End If
						' DNS
		  				strDNSServerSearchOrder = ""
		  				If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
			    			For Each strDNSServer In objNicConfig.DNSServerSearchOrder
		      					strDNSServerSearchOrder = strDNSServerSearchOrder & strDNSServer & " "
		      				Next
		    				strDNS = Split(strDNSServerSearchOrder, " ")
		    				strDNS1 = strDNS(0)
		    				If Trim(strDNS1) = "" Then strDNS1 = "N/A"

							If UBound(strDNS) > 1 Then
		    					strDNS2 = strDNS(1)
							Else
								strDNS2 = "N/A"
							End If
		  				Else
			  				strDNS1 = "N/A"
			  				strDNS2 = "N/A"
		  				End If
						' Run Output Process
						If intSkipLoop = 0 Then		
							' Connection Speed
							strSpeed = "Unknown"
							Set objWMIService2 = objSWbemLocator.ConnectServer _
	    						(strComputer, "root\WMI", strUsername, strPassword)
								objWMIServices.Security_.ImpersonationLevel = 3	
							Set listAdapters = objWMIService2.ExecQuery("SELECT * FROM MSNdis_LinkSpeed")		
							Set enumAdapters = objWMIService2.ExecQuery("SELECT * FROM MSNdis_EnumerateAdapter")		
							For Each objAdapter in listAdapters
								For Each objEnum in enumAdapters
									intEnum = Len(objEnum.DeviceName)
									If objNicConfig.SettingID = Right(objEnum.DeviceName, intEnum - 8) Then
										If objEnum.InstanceName = objAdapter.InstanceName Then   						
				    						intLength = Len(objAdapter.NdisLinkSpeed/10000)
				    						If intLength > 3 Then
				    							strSpeed = Left(objAdapter.NdisLinkSpeed/10000, intLength - 3)
				    							strSpeed = strSpeed & ".0 Gbps"
				    						Else
				    							strSpeed = objAdapter.NdisLinkSpeed/10000 & " Mbps"
				    						End If  						
			    						End If
			    					End If
		    					Next
		   					Next

							strTotalDesc = strTotalDesc & objNicConfig.Description & Chr(10)
							strTotalSpeed = strTotalSpeed & strSpeed & Chr(10)
							strTotalNetConn = strTotalNetConn & strNetConn & Chr(10)
							strPrimaryIP = strPrimaryIP & strIPCollection(0) & " / " & strSMCollection(0) & Chr(10)
							strDNSTotal1 = strDNSTotal1 & strDNS1 & Chr(10)
							strDNSTotal2 = strDNSTotal2 & strDNS2 & Chr(10)
							strTotalVirtual = strTotalVirtual & strVirtual & Chr(10)
							i = i + 1
							eth = eth + 2
							' Dispose
							strDescription = ""
							ProcCount = 0
							strClockSpeed = ""
							strInterface = ""
							intCount = 0
							strSize = ""
							strSpeed = ""
							strIPCollection = ""
							strVirtual = ""
							strDNS = ""
							strDNS1 = ""
							strDNS2 = ""
		    			End If
					Next
					' Output
					' Trim Leading Chr(10)
					If Left(strPrimaryIP, 1) = Chr(10) Then strPrimaryIP = Right(strPrimaryIP, Len(strPrimaryIP) - 1)
					If Left(strTotalVirtual, 1) = Chr(10) Then strTotalVirtual = Right(strTotalVirtual, Len(strTotalVirtual) - 1)
					If Left(strDNSTotal1, 1) = Chr(10) Then strDNSTotal1 = Right(strDNSTotal1, Len(strDNSTotal1) - 1)
					If Left(strDNSTotal2, 1) = Chr(10) Then strDNSTotal2 = Right(strDNSTotal2, Len(strDNSTotal2) - 1)
					objXLA.Cells(b + 2, 11).Value = Trim(Left(strTotalDesc, Len(strTotalDesc) - 1))
					objXLA.Cells(b + 2, 12).Value = Trim(Left(strTotalSpeed, Len(strTotalSpeed) - 1))
					objXLA.Cells(b + 2, 13).Value = Trim(Left(strTotalNetConn, Len(strTotalNetConn) - 1))					
					objXLA.Cells(b + 2, 14).Value = Trim(Left(strPrimaryIP, Len(strPrimaryIP) - 1))
					objXLA.Cells(b + 2, 15).Value = Trim(Left(strTotalVirtual, Len(strTotalVirtual) - 1))
					objXLA.Cells(b + 2, 16).Value = Trim(Left(strDNSTotal1, Len(strDNSTotal1) - 1))
					objXLA.Cells(b + 2, 17).Value = Trim(Left(strDNSTotal2, Len(strDNSTotal2) - 1))
				End If
			End If	
			' Dispose Per Loop
			strTotalDesc = ""
			strTotalSpeed = ""
			strTotalNetConn = ""
			strPrimaryIP = ""
			strDNSTotal1 = ""
			strDNSTotal2 = ""
			strTotalVirtual	= ""
			Set eth = 0
			Set i = 0
		Next
		'------------Network Information (End)------------------'

		
	Else
		'No Data Present
		objXLA.Cells(b + 2, 1).Value = strComputer
		objXLA.Cells(b + 2, 3).Value = "Information Not Available"
		objXLA.Cells(b + 2, 1).EntireRow.Font.Bold = True
		objXLA.Cells(b + 2, 1).EntireRow.Interior.ColorIndex = 44
	End If

	' Dispose Per Server
	ProcCount = 0
	strSocket = ""
	strProcID = ""
	strUniqueID = ""
	Set objWMIService = Nothing
Next



'-----------------Functions (Start)---------------------'	

' System Memory Conversion
Function MemoryConvert(strMem)
	Dim intLength
    Dim intExp
    Dim intSize
    Dim strSize
    Dim strMeasure
    Dim strMemory
                             
    intLength = Len(strMem)
                        
    If (intLength Mod 4 = 0) Then
        intExp = CInt((intLength / 3) - 2)
    Else
        intExp = CInt((intLength / 3) - 1)
    End If
        
    
    ' Convert to Lowest Integer Value
    For intCount = 1 To Len(intExp)
    	chrRead = Mid(intExp, intCount, 1)
    	If chrRead = "." Then
    		Exit For
    	Else
    		strRead = strRead & chrRead
    	End If	
    Next
    intExp = Cint(strRead) 
    intSize = CLng(strMem / (2 ^ (intExp * (10))))
    If Len(intSize) = 1 Then
     	strFormat = FormatNumber(CStr(intSize), 2)
    Else
      	strFormat = intSize + 1
    End If
    If (intExp = 1) Then
        strMeasure = "KB"
    ElseIf (intExp = 2) Then
        strMeasure = "MB"
    ElseIf (intExp = 3) Then
        strMeasure = "GB"
    ElseIf (intExp = 4) Then
        strMeasure = "TB"
    ElseIf (intExp = 5) Then
        strMeasure = "PB"
    ElseIf (intExp = 6) Then
        strMeasure = "EB"
    End If
    MemoryConvert = strFormat & " " & strMeasure
End Function



' System Byte Conversion
Function ByteConvert(strMem)
	
	Dim intLength
    Dim intExp
    Dim intSize
    Dim strSize
    Dim strMeasure
    Dim strMemory
                             
    intLength = Len(strMem)
    
    If (intLength Mod 3 = 0) Then
        intExp = (intLength / 3) - 1
    Else
        intExp = (intLength / 3)
    End If
    
    ' Convert to Lowest Integer Value
    For intCount = 1 To Len(intExp)
    	chrRead = Mid(intExp, intCount, 1)
    	If chrRead = "." Then
    		Exit For
    	Else
    		strRead = strRead & chrRead
    	End If	
    Next
    intExp = Cint(strRead)                       
    intSize = CLng(strMem / (2 ^ (intExp * (10))))                    
   	strFormat = FormatNumber(CStr(intSize), 2)
    If (intExp = 1) Then
        strMeasure = "KB"
    ElseIf (intExp = 2) Then
        strMeasure = "MB"
    ElseIf (intExp = 3) Then
        strMeasure = "GB"
    ElseIf (intExp = 4) Then
        strMeasure = "TB"
    ElseIf (intExp = 5) Then
        strMeasure = "PB"
    ElseIf (intExp = 6) Then
        strMeasure = "EB"
    End If
    ByteConvert = strFormat & " " & strMeasure
End Function



' System RAID Byte Conversion
Function ByteConvertRAID(strMem)
	
	Dim intLength
    Dim intExp
    Dim intSize
    Dim strSize
    Dim strMeasure
    Dim strMemory
                             
    intLength = Len(strMem)
    
    If (intLength Mod 3 = 0) Then
        intExp = (intLength / 3) - 1
    Else
        intExp = (intLength / 3)
    End If
    
    ' Convert to Lowest Integer Value
    For intCount = 1 To Len(intExp)
    	chrRead = Mid(intExp, intCount, 1)
    	If chrRead = "." Then
    		Exit For
    	Else
    		strRead = strRead & chrRead
    	End If	
    Next
    intExp = Cint(strRead)                       
    intSize = (strMem / (2 ^ (intExp * (10))))                    
   	strFormat = FormatNumber(CStr(intSize), 2)
	If (intExp = 0) Then
        strMeasure = "MB"                                
    ElseIf (intExp = 1) Then
        strMeasure = "GB"
    ElseIf (intExp = 2) Then
        strMeasure = "TB"
    ElseIf (intExp = 3) Then
        strMeasure = "PB"
    ElseIf (intExp = 4) Then
        strMeasure = "EB"
    End If
    ByteConvertRAID = strFormat & " " & strMeasure
End Function



' Trim Processor Description
Function ProcessorName(strName)

	Dim intCounter
	Dim strRead
	Dim chrRead, chrReadMore
	
	For intCounter = 1 to Len(strName)
		chrRead = Mid(strName, intCounter, 1)
		chrReadMore = Mid(strName, intCounter + 1, 1)
		If ((chrRead <> " ") Or ((chrRead = " ") And (chrReadMore <> " "))) Then
			strRead = strRead & chrRead
		End If
	Next
	ProcessorName = Trim(strRead)
End Function



' Get Hyper-Threading Status
Function GetHTStatus(strName, intProc, strID, strUnique)
	
	strNameArray = Split(strName, vbcrlf)
	strIDArray = Split(strID, vbcrlf)
	strUniqueList = Split(strUnique, vbcrlf)
	intTotal = 0
		
		
	' Check Socket Designation
	For i = 0 To UBound(strNameArray) - 1
		intMark = 1
		
		' Check for Redundancies
		For j = i + 1 To UBound(strNameArray) - 1
			If strNameArray(i) = strNameArray(j) Then
				intMark = 0
			End If
		Next
		' If Redundant Unique ID's Exist
		For j = i + 1 To UBound(strNameArray) - 1
			If strUniqueList(i) <> "" And strUniqueList(j) <> "" And _ 
				(strUniqueList(i) <> strUniqueList(j)) Then
				intMark = 1
			End If
		Next
		' Check for NULL ProcessorID
		If Trim(strIDArray(i)) = "0000000000000000" Then
			intMark = 0
		End If
		' Calculate Total
		If intMark = 1 Then
			intTotal = intTotal + intMark
		End If		
	Next
	' Compare Results
	If intProc = 2 * intTotal Then
		GetHTStatus = "True"
	Else
		GetHTStatus = "False"
	End If
End Function



' Get Memory Breakdown
Function MemoryBreakdown
	Set colPMAItems = objWMIService.ExecQuery("Select * from Win32_PhysicalMemoryArray",,48)
	For Each objPMAItem in colPMAItems
		lngMax = CLng(objPMAItem.MaxCapacity)
		intCount = CInt(objPMAItem.MemoryDevices)
	Next
	ReDim Preserve strPMArray(intCount)
	Set colPMItems = objWMIService.ExecQuery("Select * from Win32_PhysicalMemory",,48)

	For Each objPMItem in colPMItems
		strValue = strValue & objPMItem.DeviceLocator & ": "
		strValue = strValue & objPMItem.Capacity / 2^20 & "MB, "
		strValue = strValue & objPMItem.Speed & "MHz"
		strPMArray(TrimTrailingNumber(objPMItem.Tag)) = strValue
		strValue = ""
	Next
	j = 0
	strResult = ""
	For j = 0 To intCount - 1
		If Trim(strPMArray(j)) = "" Then strPMArray(j) = "<Empty>"
		strResult = strResult & strPMArray(j) & vbcrlf
	Next
	strResult = strResult & (lngMax / 2^10) & "MB"
	MemoryBreakdown = strResult
End Function



' Get Part Name
Function ExtractPartName(strName)
	Dim chrRead
	Dim strRead
	Dim i
	
	For i = 2 To Len(strName)
		chrRead = Mid(strName, Len(strName) - (i - 1), 1)
		If chrRead <> Chr(34) Then
			strRead = chrRead & strRead
		Else
			Exit For
		End If
	Next

	ExtractPartName = strRead
End Function



' Get Trailing Number
Function TrimTrailingNumber(strNum)

	Dim chrRead
	Dim strRead
	Dim intLen
	
	strNum = Trim(strNum)
	intLen = Len(strNum)
	
	i = 1
	For i = 1 To intLen
		chrRead = Mid(strNum, intLen - (i - 1), 1)
		If IsNumeric(chrRead) = "True" Then
			strRead = chrRead & strRead
		Else
			Exit For
		End If
	Next

	TrimTrailingNumber = strRead
End Function



' Function: WMIDateStringToDate(dtmDate)
Function WMIDateToString(dtmDate)
	WMIDateToString = CDate(Mid(dtmDate, 5, 2) & "/" & _
    Mid(dtmDate, 7, 2) & "/" & _
    Left(dtmDate, 4) & " " & _
    Mid(dtmDate, 9, 2) & ":" & _
    Mid(dtmDate, 11, 2) & ":" & _
    Mid(dtmDate, 13, 2))
End Function



' Function: GetOsVer
Function GetOsVer
	Set colOperatingSystems = objWMIService.ExecQuery _
   		("Select * from Win32_OperatingSystem")
  	For Each objOperatingSystem In colOperatingSystems
    	GetOSVer = CSng(Left(objOperatingSystem.Version, 3))
  	Next
End Function



' Function: GetHPArray
Function GetHPArray(strComputer2, strUsername2, strPassword2)

	' Check for 64-bit Windows
	If InStr(PUBOSVer, "x64") Then
		strCompaq = "Program Files (x86)\Compaq\Cpqacuxe\Bin"
	Else
		strCompaq = "Program Files\Compaq\Cpqacuxe\Bin"
	End If

	' Create Connection Object
	Set objWMIServiceRem = objWMIService.Get("Win32_Process")	
	' Confirm Location of Compaq Array Manager
	Set objHPShell = CreateObject("WScript.Shell")
	Set objHPFSO = CreateObject("Scripting.FileSystemObject")
	Set WshNetwork2 = WScript.CreateObject("WScript.Network")
	WshNetwork2.MapNetworkDrive "", "\\" & strComputer2 & "\C$" ,,strUsername2, strPassword2

	strProgram = "\\" & strComputer2 & "\C$\" & strCompaq & "\cpqacuxe.exe"
	' Ensure Access is Possible
	If objHPFSO.FileExists(strProgram) Then
		' Process Array Config
		strProcess = Chr(34) & "C:\" & strCompaq & "\cpqacuxe.exe" & Chr(34) & " -c c:\output.txt"

		Process = objWMIServiceRem.Create(strProcess, null, null, intProcessID)
		
		
		' Check for "output.txt"	
		For intTimerHP = 0 To 10
			If objFSO.FileExists("\\" & strComputer2 & "\C$\output.txt") Then
				Exit For 
			Else
				WScript.Sleep(1000)
			End If
		Next
		' Process Output		
		If intTimerHP < 10 Then
			' Check for Locked Output File
			Set objHPOutputFile = objHPFSO.GetFile("\\" & strComputer2 & "\C$\output.txt")		
			If objHPOutputFile.Size <> 0 Then
				' Close File
				Set objHPOutputFile = Nothing
				' Continue Processesing File
				Set objHPInputFile = objHPFSO.OpenTextFile("\\" & strComputer2 & "\C$\output.txt", ForReading)			
				Do Until objHPInputFile.AtEndOfStream
					strHPArray = strHPArray & objHPInputFile.ReadLine & vbcrlf
				Loop
				' Close Input File
				objHPInputFile.Close
				' Close Link to Server
				objHPFSO.DeleteFile("\\" & strComputer2 & "\C$\output.txt")
				Set objGetHPArray = objHPShell.Exec("net use \\" & strComputer2 & "\C$ /delete /yes")
				Do While (objGetHPArray.Status = 0)
					WScript.Sleep(500)
				Loop
				' Create String Array
				strHPParse = Split(strHPArray, vbcrlf)	
				' Parse For Individual RAID Arrays
				Dim strArrayList()
				z = 0
				For i = 0 To UBound(strHPParse)
					j = 0
					' Array and Drives
					If InStr(strHPParse(i), "Array Specifications") Then
						ReDim Preserve strArrayList(z)
						strArrayList(z) = strArrayList(z) & strHPParse(i) & vbcrlf
						For j = i + 1 To Ubound(strHPParse)
						 	If InStr(strHPParse(j), "Array Specifications") Then
						 		Exit For
							Else
								strArrayList(z) = strArrayList(z) & strHPParse(j) & vbcrlf
							End If
						Next
						z = z + 1
					End If
				Next		
				' Process Each RAID Array
				x = 0
				For x = 0 To UBound(strArrayList)
					strListParse = Split(strArrayList(x), vbcrlf)
					For y = 0 To UBound(strListParse)
						' Drives
						If Left(strListParse(y), 6) = "Drive=" Then
							strDrives = ""
							strDrives = Split(strListParse(y), ",")
							k = 0
							For j = 0 To UBound(strDrives)
								k = k + 1
							Next
							strDriveCount = k ' For Output
						End If
						' Hot Spare
						If InStr(strListParse(y), "OnlineSpare=") Then
							If InStr(strListParse(y), "OnlineSpare= No") Then
								strHotSpare = strHotSpare & "N" ' For Output
							Else
								strHotSpare = strHotSpare & "Y" ' For Output
							End If	
						End If
						' Logical Drives
						If InStr(strListParse(y), "Logical Drive Specifications") Then
							' Find First Logical Drive
							strRAID = Split(strListParse(y + 2), " ")
							strRAIDResult = strRAIDResult & "RAID " & strRAID(1) & " / " ' For Output
							strGetDrive = Split(strListParse(y + 3), " ")
							strRAIDSize = strRAIDSize & ByteConvertRAID(strGetDrive(1)) & " / " ' For Output			
						End If
					Next
					' Process Results
					strRAIDSize = Left(strRAIDSize, Len(strRAIDSize) - 3)
					strRAIDResult = Left(strRAIDResult, Len(strRAIDResult) - 3)
					strNewList = strNewList & strDriveCount & _":" & strRAIDSize & ":" & strRAIDResult & ":" & strHotSpare & Chr(13)
					' Dispose Array Variables	
					strDriveCount = ""
					strRAIDSize = ""
					strRAIDResult = ""
					strHotSpare	= "" 		
				Next
				' Return Array Output
				GetHPArray = Left(strNewList, Len(strNewList) - 1)
				Exit Function
			Else ' "output.txt" Is Locked
				' Close File
				Set objHPOutputFile = Nothing
				' Kill Remote Connection
				Set objGetHPArray = objHPShell.Exec("net use \\" & strComputer2 & "\C$ /delete /yes")			
				Do While (objGetHPArray.Status = 0)
					WScript.Sleep(500)
				Loop
				GetHPArray = ""
				Exit Function
			End If
		Else ' "output.txt" Does not Exist
			' Kill Remote Connection
			Set objGetHPArray = objHPShell.Exec("net use \\" & strComputer2 & "\C$ /delete /yes")
			Do While (objGetHPArray.Status = 0)
				WScript.Sleep(500)
			Loop
			GetHPArray = ""
			Exit Function
		End If
	Else ' "Array Manager  Does not Exist
		' Input not Available
		Set objGetHPArray = objHPShell.Exec("net use \\" & strComputer2 & "\C$ /delete /yes")
		Do While (objGetHPArray.Status = 0)
			WScript.Sleep(500)
		Loop
		GetHPArray = ""
		Exit Function
	End If
End Function

'--------------------Functions (End)--------------------'


' Set Excel Attributes
Const xlVAlignTop = -4160
Set objRange2 = objWorksheet.UsedRange
objRange2.VerticalAlignment = xlVAlignTop

' Set Font Attributes
objXLA.Cells.Font.Size = 8
objXLA.Cells.Font.Name = "Arial"
objXLA.Cells.Font.ColorIndex = 11
objXLA.Cells.EntireColumn.AutoFit
objXLA.Cells(1, 9).ColumnWidth = 30 ' RAM Slots
objXLA.Cells(1, 11).ColumnWidth = 40 ' NIC Port
objXLA.Cells(1, 13).ColumnWidth = 25 ' Connection Name
objXLA.Cells(1, 14).ColumnWidth = 25 ' Interface IP's
objXLA.Cells(1, 15).ColumnWidth = 25 ' Virtual IP's
objXLA.Cells(1, 16).ColumnWidth = 15 ' DNS1
objXLA.Cells(1, 17).ColumnWidth = 15 ' DNS2
objXLA.Cells(1, 18).ColumnWidth = 15 ' Interface Type
objXLA.Cells.HorizontalAlignment = 2 ' Drive Count
objXLA.Cells(1, 20).ColumnWidth = 20 ' Virtual IP's
objXLA.Cells(1, 21).ColumnWidth = 20 ' Virtual IP's

' Save
set objFSO2 = CreateObject("Scripting.FileSystemObject")
strFileName = objFSO2.getAbsolutePathName("") & "\Scan Results.xls"
objWorkbook.SaveAs(strFileName)
objWorkbook.Close
objXLA.Quit

' Notify User
WScript.Echo "Process Completed (" & Now & ")"

' Close Program
WScript.Quit(0)


Viewing all articles
Browse latest Browse all 15028

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>