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\+01:00 febrero \07\+01:00 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 )

Google photo

Estás comentando usando tu cuenta de Google. 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 )

Conectando a %s

 
A %d blogueros les gusta esto: