Link to home
Start Free TrialLog in
Avatar of UDDevHelp
UDDevHelp

asked on

How to grab IP address and MAC address using existing VB Script

The code below will allow me to grab the serial, express and model number from a computer and email the results. I am having a heck of time figuring out how to grab the IP Address and Mac Address though.

I don't know ANY VB, so, any help is appreciated.

Thanks
'strComputer = InputBox ("Enter your hostname")
 
	Dim WSHShell
	Dim objNTInfo
	Dim GetComputerName
 
	Set objNTInfo = CreateObject("WinNTSystemInfo")
	strComputer = lcase(objNTInfo.ComputerName)
 
strMyEmailAddr = InputBox("This script grabs your computer's serial, express code and model number. Please enter in your email address")
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS",,48)
For Each objItem in colItems
strSerial = objItem.SerialNumber
Next
 
 
 
Function model(strComputer)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48) 
For Each objItem in colItems
model = objItem.Model 
next
End Function
 
Function Base2Base(InputNumber,InputBase,OutputBase)
Dim J, K, DecimalValue, X, MaxBase, InputNumberLength
Dim NumericBaseData, OutputValue
NumericBaseData = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
MaxBase = Len(NumericBaseData)
if (InputBase > MaxBase) OR (OutputBase > MaxBase) then
Base2Base = "N/A"
Exit Function
end if
'Convert InputNumber to Base 10
InputNumberLength = Len(InputNumber)
DecimalValue = 0
for J = 1 to InputNumberLength
for K = 1 to InputBase
if mid(InputNumber, J, 1) = mid(NumericBaseData, K, 1) then
DecimalValue = DecimalValue+int((K-1)*(InputBase^(InputNumberLength-J))+.5)
end if
next
next
'Convert the Base 10 value (DecimalValue) to the desired output base
OutputValue = ""
while DecimalValue > 0
X = int(((DecimalValue/OutputBase)-int(DecimalValue/OutputBase))*OutputBase+1.5)
OutputValue = mid(NumericBaseData, X, 1)+OutputValue
DecimalValue = int(DecimalValue/OutputBase)
Wend
Base2Base = OutputValue
Exit Function
End Function
 
 
 
 
 
'==Message boxes.
 
WScript.Echo "Your Serial: " & strSerial
Wscript.Echo "Express code: " & Base2Base(strSerial, 36, 10)
WScript.Echo "Model:" &  model(strComputer)
WScript.Echo "IP Address:" &  objValue
 
MsgBox("Thank You")
 
 
'==Email
 
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Inventory Info"
objMessage.From = strMyEmailAddr
objMessage.To = "you@email.com"
objMessage.TextBody = "Your Serial: " & strSerial & vbCrLf & "Express Code: " & Base2Base(strSerial, 36, 10) &  vbCrLf & "Model:"  & model(strComputer)& vbCrLf & "IP Address:" & objValue
 
 
'==This section provides the configuration information for the remote SMTP server.
'==Normally you will only change the server name or IP.
 
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
 
'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
 
'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
 
objMessage.Configuration.Fields.Update
 
'==End remote SMTP server configuration section==
 
objMessage.Send

Open in new window

Avatar of UDDevHelp
UDDevHelp

ASKER

I was using this code, but I couldn't get the IP Address or MAC to display with the Serial, Model and Express code.
'==Grabs MAC and IP Address.
 
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")
 
For Each objItem In colItems
For Each objValue In objItem.IPAddress
If objValue <> "" Then
 
MsgBox(objValue)
 
WScript.Echo "Description -- " & objItem.Description & vbcrlf & "IPAddress -- " & objValue & vbcrlf & "MAC: " & objItem.MACAddress
 
MsgBox(objValue)
 
End If
Next
Next
 
 
'==End of Grab Mac and IP Address. 

Open in new window

SOLUTION
Avatar of sal-ee
sal-ee
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
This works and I appreciate you posting the code. But, I need help implementing code to grab the IP and MAC address with my existing script.
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
This works BUT it's grabbing the IP V6 IP Address, not the IPV4 IP
Hum... Have you heard about OCSInventory-NG ?
The opensource project ?
http://www.oscinventory-ng.org

You really should consider it.

Just deploying this agent you will get all the information you could dream of on all computers.
The link you posted doesn't work..
Thanks for posting the link, I corrected it above.

BUT, this script it near completion. Just need to grab the IP V4 address instead of the IP V6
It's funny, the first script sal-ee posted grabs the IP V4 Address and the IP V 6 address.....but, in the script that where sal-ee integrated his script with mine, it only grabs IP V6 address

Any ideas?

In your first script, it seems as though it loops through all the Network Adapters. But, the second integrated one only gets IP V6  info...
Anyone have any ideas? This script will do everything I need it to do, but, it only grabs IPV6 addresses and not the IPV4 address...
'strComputer = InputBox ("Enter your hostname")
 
        Dim WSHShell
        Dim objNTInfo
        Dim GetComputerName
 
        Set objNTInfo = CreateObject("WinNTSystemInfo")
        strComputer = lcase(objNTInfo.ComputerName)
 
strMyEmailAddr = InputBox("This script grabs your computer's serial, express code and model number. Please enter in your email address")
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS",,48)
 
For Each objItem in colItems
strSerial = objItem.SerialNumber
Next
 
 
Function model(strComputer)
'Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
Set colAdapters = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 
 
For Each objItem in colItems
model = objItem.Model 
next
End Function
 
Function Base2Base(InputNumber,InputBase,OutputBase)
Dim J, K, DecimalValue, X, MaxBase, InputNumberLength
Dim NumericBaseData, OutputValue
NumericBaseData = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
MaxBase = Len(NumericBaseData)
if (InputBase > MaxBase) OR (OutputBase > MaxBase) then
Base2Base = "N/A"
Exit Function
end if
'Convert InputNumber to Base 10
InputNumberLength = Len(InputNumber)
DecimalValue = 0
for J = 1 to InputNumberLength
for K = 1 to InputBase
if mid(InputNumber, J, 1) = mid(NumericBaseData, K, 1) then
DecimalValue = DecimalValue+int((K-1)*(InputBase^(InputNumberLength-J))+.5)
end if
next
next
'Convert the Base 10 value (DecimalValue) to the desired output base
OutputValue = ""
while DecimalValue > 0
X = int(((DecimalValue/OutputBase)-int(DecimalValue/OutputBase))*OutputBase+1.5)
OutputValue = mid(NumericBaseData, X, 1)+OutputValue
DecimalValue = int(DecimalValue/OutputBase)
Wend
Base2Base = OutputValue
Exit Function
End Function
 
' Get IP and MAC Address
 
strComputer = "."
 
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 
Set colAdapters = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
 
n = 1
 
For Each objAdapter in colAdapters
 
   strMACAddress = objAdapter.MACAddress
 
   If Not IsNull(objAdapter.IPAddress) Then
      For i = 0 To UBound(objAdapter.IPAddress)
         objValue = objAdapter.IPAddress(i)
      Next
   End If
 
Next 
 
 
'==Message boxes.
 
WScript.Echo "Your Serial: " & strSerial
Wscript.Echo "Express code: " & Base2Base(strSerial, 36, 10)
WScript.Echo "Model:" &  model(strComputer)
WScript.Echo "IP Address:" &  objValue
WScript.Echo "MAC Address:" &  strMACAddress
 
MsgBox("Thank You")
 
 
'==Email
 
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Inventory Info"
objMessage.From = strMyEmailAddr
objMessage.To = "you@email.com"
objMessage.TextBody = "Your Serial: " & strSerial & vbCrLf & "Express Code: " & Base2Base(strSerial, 36, 10) &  vbCrLf & "Model:"  & model(strComputer)& vbCrLf & "IP Address:" & objValue & vbCrLf & "MAC Address:" & strMACAddress
 
 
'==This section provides the configuration information for the remote SMTP server.
'==Normally you will only change the server name or IP.
 
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
 
'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
 
'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
 
objMessage.Configuration.Fields.Update
 
'==End remote SMTP server configuration section==
 
objMessage.Send

Open in new window

Got it! A co-worker helped me figure it out!

This code is helpful for anyone who needs to take inventory of computers and users. It will grab the model number, serial number, express code, Mac Address and IP Address. Then, it will email the results to you.

Written in Visual Basic. Save file as "something.vbs"


'strComputer = InputBox ("Enter your hostname")
 
		Dim WSHShell
		Dim objNTInfo
		Dim GetComputerName
 
		Set objNTInfo = CreateObject("WinNTSystemInfo")
		strComputer = lcase(objNTInfo.ComputerName)
 
strMyEmailAddr = InputBox("This script grabs your computer's serial, express code and model number. Please enter in your email address")
 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS",,48)
 
For Each objItem in colItems
strSerial = objItem.SerialNumber
Next
 
 
Function model(strComputer)
'Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objWMIService = GetObject("winmgmts:" _
	& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
Set colAdapters = objWMIService.ExecQuery _
	("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") 
 
For Each objItem in colItems
model = objItem.Model 
next
End Function
 
Function Base2Base(InputNumber,InputBase,OutputBase)
Dim J, K, DecimalValue, X, MaxBase, InputNumberLength
Dim NumericBaseData, OutputValue
NumericBaseData = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
MaxBase = Len(NumericBaseData)
if (InputBase > MaxBase) OR (OutputBase > MaxBase) then
Base2Base = "N/A"
Exit Function
end if
'Convert InputNumber to Base 10
InputNumberLength = Len(InputNumber)
DecimalValue = 0
for J = 1 to InputNumberLength
for K = 1 to InputBase
if mid(InputNumber, J, 1) = mid(NumericBaseData, K, 1) then
DecimalValue = DecimalValue+int((K-1)*(InputBase^(InputNumberLength-J))+.5)
end if
next
next
'Convert the Base 10 value (DecimalValue) to the desired output base
OutputValue = ""
while DecimalValue > 0
X = int(((DecimalValue/OutputBase)-int(DecimalValue/OutputBase))*OutputBase+1.5)
OutputValue = mid(NumericBaseData, X, 1)+OutputValue
DecimalValue = int(DecimalValue/OutputBase)
Wend
Base2Base = OutputValue
Exit Function
End Function
 
' Get IP and MAC Address
 
strComputer = "."
 
Set objWMIService = GetObject("winmgmts:" _
	& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 
Set colAdapters = objWMIService.ExecQuery _
	("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
 
n = 1
 
ipcount = 0
For Each objAdapter in colAdapters
 
   strMACAddress = objAdapter.MACAddress
	
   If Not IsNull(objAdapter.IPAddress) Then
	  For i = 0 To UBound(objAdapter.IPAddress)
		 ReDim Preserve ipAddys(ipcount)
		 ipAddys(ipcount) = objAdapter.IPAddress(i)
		 ipcount = ipcount + 1
	  Next
   End If
 
 
 
 
Next 
 
 
'==Message boxes.
 
WScript.Echo "Your Serial: " & strSerial
Wscript.Echo "Express code: " & Base2Base(strSerial, 36, 10)
WScript.Echo "Model:" &  model(strComputer)
For i = 0 To ipcount-1
  WScript.Echo "IP Address:" &  ipAddys(i)
Next
 
WScript.Echo "MAC Address:" &  strMACAddress
 
MsgBox("Thank You")
 
 
'==Email
 
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Inventory Info"
objMessage.From = strMyEmailAddr
objMessage.To = "yourEmail@email.com"
objMessage.TextBody = "Your Serial: " & strSerial & vbCrLf & "Express Code: " & Base2Base(strSerial, 36, 10) &  vbCrLf & "Model:"  & model(strComputer)& vbCrLf & "IP Address:" & ipAddys(0) & vbCrLf & "MAC Address:" & strMACAddress
 
 
'==This section provides the configuration information for the remote SMTP server.
'==Normally you will only change the server name or IP.
 
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
 
'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.emailServer.com"
 
'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
 
objMessage.Configuration.Fields.Update
 
'==End remote SMTP server configuration section==
 
objMessage.Send

Open in new window