El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Script Para Cambiar la Puerta de Enlace de Todos Los Equipos del Dominio

Posted by urpiano en Martes 7 \07\UTC febrero \07\UTC 2006

Este script nos permite cambiar la puerta de enlace de todos los equipos del dominio en una sola ejecución. Deberá ser lanzado por un usuario con los permisos y privilegios necesarios para leer Active Directory y para leer y escribir en WMI de los equipos destino (hablando en plata, por un administrador del dominio). Su sintaxis es:

cscript cambia-gw-equipos-dominio.vbs dominio gw [exclusiones]

Donde:

dominio: Requerido – nombre LDAP del dominio en el que se buscarán las cuentas de los equipos a cambiar la puerta de enlace.
gw: Requerido – Nueva puerta de enlace a establecer.
exclusiones: Opcional – nombre NetBios de los equipos a los cuales cambiar la puerta de enlace.

Ejemplo:

cscript cambia-gw-dominio.vbs dc=contoso,dc=net 192.168.0.1 dc1,dc2,isa1,sqlsvr1

En este ejemplo cambiaremos la puerta de enlace a los equipos del dominio contoso.net, estableciendo el valor 192.168.0.1 y excluyendo del cambio a los equipos cuyo nombre NetBios sea sc1, dc2, isa1 o sqlsvr1.

El script revisará que el equipo a cambiar responda al ping, en caso contrario pasará al siguiente.

Pongo a continuación el código del script:

'Script que permite cambiar la puerta de enlace de los equipos
'de un dominio. La sintaxis es:

'cscript cambia-gw-equipos-dominio.vbs <dominio> <gw> [<exclusiones>]

'Donde:

'<dominio>: Requerido – nombre LDAP del dominio en el que se buscarán
' las cuentas de los equipos a cambiar la puerta
' de enlace.
'<gw>: Requerido – Nueva puerta de enlace a establecer.
'<exclusiones>: Opcional – nombre NetBios de los equipos a los cuales
' cambiar la puerta de enlace.

'Ejemplo:

'cscript cambia-gw-dominio.vbs dc=contoso,dc=net 192.168.0.1 dc1,dc2,isa1,sqlsvr1

'En este ejemplo cambiaremos la puerta de enlace a los equipos del dominio
'contoso.net, estableciendo el valor 192.168.0.1 y excluyendo del cambio
'a los equipos cuyo nombre NetBios sea sc1, dc2, isa1 o sqlsvr1.

'© Fernando Reyes – Septiembre 2005


Const ADS_SCOPE_SUBTREE = 2

str_Dominio = WScript.Arguments(0)
If WScript.Arguments.Count = 3 Then
    str_Excluidos = UCase(WScript.Arguments(2))
    arr_Excluidos = Split(str_Excluidos,",")
Else
    arr_Excluidos = Array("")
End If

arr_PuertaEnlace = Array(WScript.Arguments(1))
arr_Metrica = Array(1)

Set obj_Conexion = CreateObject("ADODB.Connection")
Set obj_Comando = CreateObject("ADODB.Command")
obj_Conexion.Provider = "ADsDSOObject"
obj_Conexion.Open "Active Directory Provider"

Set obj_Comando.ActiveConnection = obj_Conexion
obj_Comando.CommandText = _
    "Select Name from 'LDAP://" & str_Dominio & "' " _
        & "Where objectClass='computer'"
obj_Comando.Properties("Page Size") = 1000
obj_Comando.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set obj_Recordset = obj_Comando.Execute
obj_Recordset.MoveFirst

Do Until obj_Recordset.EOF
    If fn_Excluido(obj_Recordset.Fields("Name").Value) = False Then
        If fn_Ping(obj_Recordset.Fields("Name").Value) = True Then
            strComputer = obj_Recordset.Fields("Name").Value
            strGateway = Array("192.168.0.200")
            strGatewayMetric = Array(1)

            Set objWMIService = GetObject("winmgmts:\" & strComputer _
                    & "rootcimv2")
            Set IPConfigSet = objWMIService.ExecQuery( _
                "Select * from Win32_NetworkAdapterConfiguration ")

            For Each IPConfig in IPConfigSet
                If Not IsNull(IPConfig.IPAddress) Then
                    For i=LBound(IPConfig.IPAddress) _
                      To UBound(IPConfig.IPAddress)
                        If IPConfig.DefaultIPGateway(0) <> _
                            arr_PuertaEnlace(0) Then
                            errGateways = IPConfig.SetGateways( _
                            arr_PuertaEnlace, arr_Metrica)
                            Wscript.Echo "Equipo Procesado: " & _
                                obj_Recordset.Fields("Name").Value & _
                                ": puerta de enlace cambiada."”
                        Else
                            Wscript.Echo "Equipo Excluido: " & _
                            obj_Recordset.Fields("Name").Value & _
                                ": puerta de enlace ya establecida anteriormente."
                        End if
                    Next
                End If
            Next
        Else
            Wscript.Echo "Equipo Excluido: " & _
                obj_Recordset.Fields("Name").Value & _
                    ": no responde al ping."
        End If
    Else
        Wscript.Echo "Equipo Excluido: " & _
            obj_Recordset.Fields("Name").Value & _
                "”: excluido a petición del usuario."

    End If
        obj_Recordset.MoveNext
Loop

Function fn_Excluido(str_Nombre)

    bln_Devolucion = False
    For int_Nombre = 0 To Ubound(arr_Excluidos)
        If UCase(str_Nombre) = arr_Excluidos(int_Nombre) Then
            bln_Devolucion = True
        End If
    Next

    fn_Excluido = bln_Devolucion

End Function

Function fn_Ping(str_Nombre)

    Set objShell = CreateObject("WScript.Shell")
    Set objScriptExec = objShell.Exec( _
    "ping -n 2 -w 1000 " & str_Nombre)
    strPingResults = LCase(objScriptExec.StdOut.ReadAll)
    If InStr(strPingResults, "respuesta desde") Then
        If InStr(strPingResults, "host de destino inaccesible") Then
            bln_Devolucion = False
        Else
             bln_Devolucion = True
        End If
    Else
         bln_Devolucion = False
    End If

    fn_Ping = bln_Devolucion

End Function

Fichero VBS: Este es el script. Se le debe cambiar la extensión a de txt a vbs y lanzarlo con cscript

3 comentarios to “Script Para Cambiar la Puerta de Enlace de Todos Los Equipos del Dominio”

  1. x said

    no se ni madres de redes o_o

  2. Keisha said

    Hi there to every body, it’s my first visit of this webpage; this weblog consists of amazing and actually fine data designed for readers.

  3. Thank you for the good writeup. It in fact was a amusement account
    it. Look complicated to more introduced agreeable from you!
    By the way, how can we communicate?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: