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.
Índice del artículo
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:WindowsTempNetViewList.txt", 2,True Set TheNVFile = FileSystem.OpenTextFile("C:WindowsTempNetViewList.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:WindowsTempNetViewList.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:WindowsTempNBTList.txt", 2,True Set TheNBTFile = FileSystem.OpenTextFile("C:WindowsTempNBTList.txt", ForReading, True) GetNBTable = TheNBTFile.ReadAll TheNBTFile.Close FileSystem.DeleteFile("C:WindowsTempNBTList.txt") End Function Function GetIPAddress(HostName) IPCommand = "ping -n 1 " & HostName WshShell.Run "Cmd.exe /c " & IPCommand &" > C:WindowsTempIPList.txt", 2,True Set TheIPFile = FileSystem.OpenTextFile("C:WindowsTempIPList.txt", ForReading, True) GetIPAddress = TheIPFile.ReadAll TheIPFile.Close FileSystem.DeleteFile("C:WindowsTempIPList.txt") End Function
Crear archivo inventario de red local automático
Nota: Los equipos deben estar prendidos (Puede ser sin iniciar sesión)
- 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 - Guardamos el archivo con un nombre que deseemos puede ser InventarioDeRed y con extensión .vbs
Vb guardar notepad++ - Nos aparecerá un archivo como el siguiente el cual dando doble clic.
- En un principio veremos un cuadro de dialogo que indica que el proceso esta comenzando.
- 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).
- El proceso puede tardar algunos minutos dependiendo la cantidad de equipos existentes en la Red.
- Al finalizar el proceso nos va a aparecer la ventana Guardar Como (Save As).
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.
Buen dia Andy
Fíjate que no he detectado porque les regresa con esa información, en un principio supuse que fueron privilegios de red, pero por las pruebas que me comentas que realizaste no es, yo lo he ejecutado sin problema en Windows 7 y 10 asi que las referencias son iguales.
Si llego a detectar les retroalimento con el detalle.
Buen dia Fernando presento el mismo inconveniente que roberto al ejecutarlo en las 3 columnas me aparece el nombre del PC
GYE1AWBR GYE1AWBR GYE1AWBR
Indico que realice las pruebas que dices en la consola net view y luego el nbtstat y pues me mostro la mac y la ip del computador a que se debe que no genera los otros campos correctamente.
Saludos
Buen dia Israel
Seguramente son las lineas donde se eliminan los archivos temporales que se crean; marca como comentario (con un apostrofe [‘]) las lineas que comienzan con FileSystem.DeleteFile lo ejecutas y vemos si son esas las lineas, me comentas resultado.
Saludos.
me aparece un error acceso denegado que puedo hacer, tengo windows 10 y el firewall activado y windows defender
Buen dia Roberto
Es algo extraño, puedes realizar una prueba?
Trata de ejecutar en la consola Net View despues toma un nombre de los que te arroje y ejecutas nbtstat -a NombredePC y despues ping -n 1 NombredePC que resultados te arroja despues de ejecutar cada comando?
Hola, de nuevo ….
incluso lo ejecute desde Windows server y si abre el Excel, y comienza a generar filas el detalle que en las tres columnas me pone el nombre de un host. p.e :
Nombre Equipo Direccion IP Direccion MAC
PC1 PC1 PC1
PC2 PC2 PC2
asi todos los equipos ….
Buen dia Roberto
Para que se ejecute correctamente debes tener privilegios de administrador de red en el usuario que ejecuta el Script, también puede tardar un par de segundos en comenzar a desplegar información.
Excelente dia
Hola … yo lo ejecute y me pone solo el nombre en las tres columnas ….
Buen dia Mariano
Lo único que se requiere es tener privilegios de administrador, mas no lo he probado en redes con equipos con Windows 10, solo mi equipo tiene W10; también me ha tocado que no me muestra algunos equipos cuando tienen el firewall de Windows habilitado para el dominio.
Trata de ejecutar en la consola Net View asi como nbtstat -a NombredePC y tambien ping -n 1 NombredePC para ver si te regresa algun dato o puedes ver el error, esas son las tres instrucciones que utiliza para obtener la información, es importante que sea el nombre de la PC ya que es lo que utiliza el script.
solo me llena con 3 equipos, y no encuentra los demas de la red, mi pc donde corro el script es windows 7