VBScript – Crear inventario de red local automático en Excel

Cuando administramos una red y no llevamos un control o un inventario de equipos, IPs, etc. Si requerimos obtener estos datos rápidamente podemos crear un inventario de red local automático e ir complementando los datos faltantes y quizás corroborar alguna muestra de equipos.

Código VBScript para crear inventario de red local automático

Con el siguiente código podremos crear un inventario automático de los equipos de Red con los campos: Nombre de Equipo, Direccion IP y Direccion MAC, el cual nos lo guardara en una Hoja de Excel al finalizar el proceso.

Option Explicit
Dim Row, XL, WshShell, FileSystem, RegularExpression, Dummy, TheNVFile, TheLine
Dim Whacks, WhacksFound, WhacksPattern,  Flag, HostName, NBTable, PingReport, PingPattern
Dim IPAddress, MACPattern, MACAddress, Matches, TheMatch, Match, NBCommand, TheNBTFile
Dim IPCommand, TheIPFile, FileName, TheDate, Suggestion, Book

Const ForReading = 1
Row = 2

Set XL = WScript.CreateObject("Excel.Application")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set RegularExpression = New RegExp

Dummy = WshShell.Popup ("Compiling Network Address Inventory.  Please Wait...",1,"Network Address Inventory Utility",64)

Call BuildSpreadSheet()

WshShell.Run "Cmd.exe /c Net View > C:\Windows\Temp\NetViewList.txt", 2,True
Set TheNVFile = FileSystem.OpenTextFile("C:\Windows\Temp\NetViewList.txt", ForReading, True)

Do While TheNVFile.AtEndOfStream <> True
	TheLine = TheNVFile.ReadLine
	Whacks = "\\"
	WhacksFound = FindPattern(TheLine, Whacks)
	If WhacksFound Then
		WhacksPattern = "\\\\\S*"
		Flag = "1"
		HostName = GetPattern(TheLine, WhacksPattern, Flag )
		NBTable = GetNBTable(HostName)
		MACPattern = "MAC Address = \S*"
		Flag = "2"
		MACAddress = GetPattern(NBTable, MACPattern, Flag )
		PingReport = GetIPAddress(HostName)
		PingPattern = "Reply from \S*"
		Flag = "3"
		IPAddress = GetPattern(PingReport, PingPattern, Flag )
		IPAddress = Replace(IPAddress, ":", "") 
		Call AddToSpreadSheet(HostName, IPAddress, MACAddress)
	End If
Loop    

TheNVFile.Close
FileSystem.DeleteFile("C:\Windows\Temp\NetViewList.txt")
Dummy = WshShell.Popup ("Network Address Inventory Operation Complete",5,"Network Address Inventory Utility",64 )
Call SaveSpreadSheet()
Wscript.Quit

Sub BuildSpreadSheet()
	XL.Visible = True
	Set Book = XL.WorkBooks.Add
	XL.Columns(1).ColumnWidth = 20
	XL.Columns(2).ColumnWidth = 20
	XL.Columns(3).ColumnWidth = 20
	XL.Cells(1, 1).Value = "Nombre Equipo"
	XL.Cells(1, 2).Value = "Direccion IP"
	XL.Cells(1, 3).Value = "Direccion MAC"
	XL.Range("A1:C1").Select
	XL.Selection.Font.Bold = True
	XL.Selection.Font.Size = 12
End Sub

Sub AddToSpreadSheet(HostName, IPAddress, MACAddress)
	XL.Cells(Row, 1).Value = HostName
	XL.Cells(Row, 2).Value = IPAddress
	XL.Cells(Row, 3).Value = MACAddress
	Row = Row + 1
	XL.Cells(Row, 1).Select
End Sub

Sub SaveSpreadSheet()
	TheDate = Date
	TheDate = Replace(TheDate, "/", "-")
	Suggestion = "NetAI " & TheDate & ".xls"
	FileName = XL.GetSaveAsFilename(Suggestion)
	If FileName <> False Then
		Book.SaveAs(FileName)
	End If
End Sub  

Function FindPattern(TheText, ThePattern)
	RegularExpression.Pattern = ThePattern
	If RegularExpression.Test(TheText) Then
		FindPattern = "True"
	Else
		FindPattern = "False"
	End If
End Function

Function GetPattern(TheText, ThePattern, Flag)
	RegularExpression.Pattern = ThePattern
	Set Matches = RegularExpression.Execute(TheText) 
	For Each Match in Matches
		TheMatch = Match.Value 
		If Flag = "1" Then TheMatch = Mid(TheMatch, 3)
		If Flag = "2" Then TheMatch = Mid(TheMatch, 14)
		If Flag = "3" Then TheMatch = Mid(TheMatch, 11)
	Next
	GetPattern = TheMatch
End Function

Function GetNBTable(HostName)
	NBCommand = "nbtstat -a " & HostName
	WshShell.Run "Cmd.exe /c " & NBCommand &" > C:\Windows\Temp\NBTList.txt", 2,True
	Set TheNBTFile = FileSystem.OpenTextFile("C:\Windows\Temp\NBTList.txt", ForReading, True)
	GetNBTable = TheNBTFile.ReadAll
	TheNBTFile.Close
	FileSystem.DeleteFile("C:\Windows\Temp\NBTList.txt")
End Function

Function GetIPAddress(HostName)
	IPCommand = "ping -n 1 " & HostName
	WshShell.Run "Cmd.exe /c " & IPCommand &" > C:\Windows\Temp\IPList.txt", 2,True
	Set TheIPFile = FileSystem.OpenTextFile("C:\Windows\Temp\IPList.txt", ForReading, True)
	GetIPAddress = TheIPFile.ReadAll
	TheIPFile.Close
	FileSystem.DeleteFile("C:\Windows\Temp\IPList.txt")
End Function

Crear archivo inventario de red local automático

Nota: Los equipos deben estar prendidos (Puede ser sin iniciar sesión)

  1. Abrimos un editor de texto como Notepad (recomendado Notepad++) copiamos el código del Script anterior y lo pegamos.
    Pegar en notepad++ el Código VBScript para crear inventario de red local automático
    Pegar en notepad++ el Código VBScript para crear inventario de red local automático
  2. Guardamos el archivo con un nombre que deseemos puede ser InventarioDeRed y con extensión .vbs
    Vb guardar notepad++
    Vb guardar notepad++
  3. Nos aparecerá un archivo como el siguiente el cual dando doble clic.
  4. En un principio veremos un cuadro de dialogo que indica que el proceso esta comenzando.
  5. Nos ejecutara Excel y una ventana de Command Prompt automáticamente donde comenzara a llenar con la información (Nombre del Equipo, Dirección IP y Dirección MAC).
  6. El proceso puede tardar algunos minutos dependiendo la cantidad de equipos existentes en la Red.
  7. Al finalizar el proceso nos va a aparecer la ventana Guardar Como (Save As).
Leer:  Windows 10 - Actualizar de Windows 10 Home a Pro con este CD-Key

Información: Vamos a percatarnos que existen algunos equipos que en los campos Direccion IP y Direccion MAC nos aparece el nombre del equipo en todos los campos o nos aparece la IP del equipo donde estamos ejecutando el script. Esto se debe a que el equipo se encuentra apagado o no se tiene respuesta del equipo puede ser por bloqueo del Firewall.

Fernando O.

Fernando O.

Soy analista de sistemas actualmente trabajo en una empresa con mas de 200 empleados que utilizan equipo de computo al cual se les da soporte en el departamento.
Uno de mis pasatiempos fuera de la empresa es escribir artículos para PortalMasTips donde documento los problemas, inquietudes y detalles interesantes que se presentan.
Fernando O.

Latest posts by Fernando O. (see all)

26
Deja una respuesta

avatar
 
Archivos de fotos e imágenes
 
 
 
Archivos de audio y video
 
 
 
Otros tipos de archivos
 
 
 
11 Hilos de comentarios
15 Respuestas de hilo
0 Seguidores
 
Comentario más reaccionado
Hilo de comentarios más caliente
12 Autores de comentarios
Andy BermudezIsrael alvarado AguilarRoberto OcampoMarianoConsuelo Autores de comentarios recientes

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

  Suscribir  
el más nuevo más antiguo más votado
Notificar de
Jose Luis
Guest
Jose Luis

¡Hola!
Gran aporte, me encantó, de igual forma seria bueno agregar a ese script el tipo modelo y serial de la maquina.

saludos..

Alex Giovannni cardenas
Guest
Alex Giovannni cardenas

Hola, quisiera saber como configuara el codgo, pero con LbreOffice, Gracias

Alex
Guest
Alex

Gracias por tu respuesta, voy a trabajar en el asunto

Marcial Esteche
Guest

Buen aporte, desde Paraguay saludos!!!

pablo
Guest
pablo

Excelente aportacion, muy bueo, de casualdiad no tendras uno para invenatrio de hardware….Saludos desde Cd. Juarez Mexico

victor
Guest
victor

excelente aporte muchas gracias

Sergio
Guest
Sergio

Buenas Fernandoy gracias por el aporte, estoy intentando hacer el inventario, pero me da error “Permiso denegado” codigo 800A0046, la linea del script que da error es
“FileSystem.DeleteFile(“C:\Windows\Temp\NBTList.txt”)”

Consuelo
Guest
Consuelo

Hola! Me parece excelente aporte. Estoy intentando utilizarlo pero me arroja un error.
De hecho es el mismo que a Sergio, justo en la línea
FileSystem.DeleteFile(“C:\Windows\Temp\NBTList.txt”)
ya intenté ejecutarlo logueandome como Administrador del equipo y nada.
Tengo Windows 7 Professional.
agradezco bastante cualquier ayuda al respecto

Mariano
Guest
Mariano

El script me funciona correctamente pero no me devuelve ningun resultado, estoy trabajando con maquinas en dominio, supongo que debe haber alguna restricción de acceso. Aparece un error en CMD pero no llego a visualizarlo.

Roberto Ocampo
Guest

Hola … yo lo ejecute y me pone solo el nombre en las tres columnas ….

Israel alvarado Aguilar
Guest

me aparece un error acceso denegado que puedo hacer, tengo windows 10 y el firewall activado y windows defender

Compartir
Twittear
Pin