Extraer datos de red mediante VBScript


Se necesita saber ciertos datos de red de todos los equipos de un dominio, manos a la obra.
 

Montaremos un script que enviará a un documento de texto los datos de las interfaces de red, para ello necesitamos
  • Ser administradores del dominio, en una GPO existente o una nueva meteremos el script.
  • Un recurso compartido donde todos los equipos puedan modificar un archivo de texto.

El script quedaría tal que así:
 
strComputer = "."
Dim nameHost    
Dim direccionIP
Dim mascara
Dim defaultGateway

Sub DatosRed	
	Set objWMIService = GetObject _
	    ("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
	Set colAdapters = objWMIService.ExecQuery _
	    ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")

	For Each objAdapter in colAdapters
	    ' Sacar datos de multiples interfaces, si no se realiza el bucle va machacando valores	    
	    ' Extraer direcciones IP
   		If Not IsNull(objAdapter.IPAddress) Then 
   			nameHost = objAdapter.DNSHostName	  
   			For i = 0 To UBound(objAdapter.IPAddress) 
         		direccionIP =  objAdapter.IPAddress(i) 
      		Next 
      		' Extraer gateways
      			If Not IsNull(objAdapter.DefaultIPGateway) Then 
		      		For i = 0 To UBound(objAdapter.DefaultIPGateway) 
		         		defaultGateway = objAdapter.DefaultIPGateway(i) 
		      		Next 
	   			End If 
	   			' Extraer mascara
      		   If Not IsNull(objAdapter.IPSubnet) Then 
      				For i = 0 To UBound(objAdapter.IPSubnet) 
         				mascara =  objAdapter.IPSubnet(i) 
      				Next 
      			End If 
      			DatosRedLog
   		End If 
	Next
End Sub

Sub DatosRedLog ()
	Set objFS = CreateObject("Scripting.FileSystemObject")
	Const ForAppending = 8
	Dim rutaLog
	' Esta ruta tiene que ser accesible y crear el archivo
	rutaLog = "\\Servidor\RecursoCompartido\DatosRed_Log.txt"
	
	'Apertura de archivo log en modo Appendig (=>inserta texto en la ultima linea)
	Set objFile = objFS.OpenTextFile (rutaLog, ForAppending)
	
	'Introducir los valores recogidos 
	objFile.WriteLine nameHost & ", " & direccionIP & ", " & defaultGateway & ", " & mascara
	objFile.Close
End Sub 

DatosRed 

Debido a la premura no he incluido las secuencias para crear un archivo de texto y comporbar que si existe no lo machaque por lo que has de crear en la ruta que definas en la variable rutaLog el archivo de texto con nombre DatosRed_Log.txt.

Como puedes comprobar realmente es un archivo csv para que lo puedas importar y modificar con tablas dinámicas en una hoja de cálculo.

¿Que más datos puedo obtener? Pues si vemos la información del objeto objAdapter podemos sacar multitud de datos interesantes como por ejemplo:

       "DNS domain: " => objAdapter.DNSDomain
       "DNS suffix search list: " => objAdapter.DNSDomainSuffixSearchOrder
       "Description: " => objAdapter.Description
       "Physical address: " => objAdapter.MACAddress
       "DHCP enabled: " => objAdapter.DHCPEnabled
       "DHCP server: " => objAdapter.DHCPServer
       "DNS server: " => objAdapter.DNSServerSearchOrder
       "Primary WINS server: " => objAdapter.WINSPrimaryServer
       "Secondary WINS server: " => objAdapter.WINSSecondaryServer
       "Lease obtained: " => objAdapter.DHCPLeaseObtained
       "Lease expires: " => objAdapter.DHCPLeaseExpires

       ...

¿Cómo modificar nuestro script para incluir un nuevo campo?
  1. Creamos una variable para que almacene el dato, por ejemplo Dim dominioDNS
  2. Dentro del procedimiento DatosRed asignamos un valor a la variable:
    1. si el valor es único  DominioDNS=  objAdapter.DNSDomain
    2. pero si tiene varios valores es necesario crear una iteración dentro de un if not is null para que escriba todos los valores, fijaros en el script.
  3. Modificamos el procedimiento de escritura de log. Añadimos al final de WriteLine lo siguiente:
    1. Separador de valores, en nuestro caso una coma => & "," &
    2. Añadir el valor almacenado => dominioDNS

No hay comentarios:

Publicar un comentario