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 VbScript para obtener la configuración de Proxy de IE del usuario que lo ejecuta

Posted by urpiano en Jueves 25 \25\UTC agosto \25\UTC 2011

Desarrollado para dar respuesta en el foro de scripting de Technet, este script permite averiguar la configuración de proxy en Internet Exporer del usuario que lo lanza.

Difiere de la mayoría de scripts que se ven por ahí en que no usa WMI si no que lee directamente del registro. Esto es motivado por que el que preguntaba necesitaba que le valiese para Windows XP y Windows 7; los scripts que utilizan WMI para hacer esto consultan en el espacio de nombres root/CIMv2/Applications/MicrosoftIE, espacio de nombres que no existe en Windows 7, por lo que decidí mirar en el registro, ya que la configuración se guarda en las mismas claves y valores que en XP.

Los valores del registro de configuración del proxy en IE están ubicadas en la clave HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings, y los valores que se encargan de almacenar la información son:

Valor Tipo Descripción
ProxyEnable REG_DWORD
Este valor implica la utilización de proxy si su contenido es distinto de cero. Es el único valor que es seguro que estará presente, si su valor es cero, el resto de valores no aparecerán.
ProxyServer REG_SZ
Guarda la configuración de proxy. Si el proxy está habilitado, este valor existirá, si no está habilitado no existirá. Tiene dos posibles nomenclaturas:
  • Si es el mismo proxy para todos los protocolos: <servidor>:<puerto> (proxy1.tia.org:80).
  • Si es distinto proxy para cada protocolo: <protocolo1>=<servidor1>:<puerto1>;<protocolo2>=<servidor2>:<puerto2>… (ftp=pf.tia.org:21;http=ph.tia.org:80;https=phs.tia.org:443;socks=ps.tia.org:1080).
ProxyOverride REG_SZ
Guarda las exclusiones de proxy (nombres o IPs que no utilizarán el proxy) y también si se omite el uso de proxy para direcciones locales. Las exclusiones se guardan como valores separados por punto y coma: exclusion1;exclusion2;exclusion3;… Si se omite el uso de proxy para direcciones locales se almacenará la exclusión <local>. Ejemplos:
  • Hay exclusiones y no se omite el uso de proxy para direcciones locales: dominio1.org;dominio2.org;dominio3.org
  • Hay exclusiones y se omite el uso de proxy para direcciones locales: dominio1.org;dominio2.org;dominio3.org;<local>
  • No hay exclusiones y se omite el uso de proxy para direcciones locales: <local>

Se puede ejecutar con WScript y con CScript, ya sea haciendo doble clic sobre el script desde el explorador de Windows como desde una ventana de comandos invocándolo con CScript. No recibe ningún parámetro. Así pues, basta con copiar el código del script, pegarlo en el bloc de notas, guardar el script con extensión VBS y ejecutarlo. Este es el código del script:

Option Explicit

Dim obj_SH
Dim dbl_Enabled
Dim str_Proxy
Dim str_Excepciones
Dim arr_Proxy
Dim str_ProxyProtocolo
Dim str_Devolucion
Dim str_Excepcion
Dim arr_Excepciones
Dim obj_NW
Dim str_DevolucionExcepciones
Dim bol_OmitirLocal

'Creamos un objeto WshShell
Set obj_SH = CreateObject("WScript.Shell")

'Obtenemos si el usuario tiene habilitado el servidor Proxy en IE
dbl_Enabled = obj_SH.RegRead("HKCU\Software\Microsoft\Windows" & _
                             "\CurrentVersion\Internet Settin" & _
                             "gs\ProxyEnable")
'Si el proxy está habilitado, debemos obtener sus propiedades y
'excepciones
If dbl_Enabled <> 0 Then

    'Obtenemos la configuración de servidor proxy
    str_Proxy = obj_SH.RegRead("HKCU\Software\Microsoft\Windows" & _
                             "\CurrentVersion\Internet Settings" & _
                             "\ProxyServer")
    'La configuración de proxy puede ser con todos los protocolos por
    'el mismo proxy o especificando el proxy para cada protocolo. Si
    'se especifica el mismo proxy para todos los protocolos la entrada
    'será así:
    
    '<servidor>:<puerto>
    
    'Por ejemplo:
    
    'proxy1.tia.org:80
    
    'si hay configuración de proxy para cada puerto, la entrada será así:
    
    '<protocolo1>=<servidor1>:<puerto1>;<protocolo2>=<servidor2>:<puerto2>...
    
    'Por ejemplo:
    
    'ftp=pf.tia.org:21;http=ph.tia.org:80;https=phs.tia.org:443;socks=ps.tia.org:1080
    
    'Así pues, averiguamos si la entrada contiene punto y coma (que es
    'el separador de cada configuración de protocolo). Si la tiene es
    'que hay configuración por protocolo, si no es que es el mismo
    'proxy para todos los protocolos
    If InStr(1,str_Proxy,";") > 0 Then
    
        'La configuración es especificando servidor por protocolo
        
        'Montamos en la devolución la cabecera de la lista de configuraciones
        'de protocolos, con la leyenda de su significado
        str_Devolucion = "Servidores Proxy:" & vbcrlf & _
                         vbtab & "<Protocolo>=<Servidor>:<Puerto>"
        str_Devolucion = str_Devolucion & vbcrlf & vbTab & _
                         String(Len("<Protocolo>=<Servidor>:<Puerto>"),"=")
                         
        'Creamos un array con las configuraciones de los protocolos
        arr_Proxy = Split(str_Proxy,";")
        
        'Recorremos el array
        For Each str_ProxyProtocolo In arr_Proxy
            
            'Agregamos a la devolución la configuración del protocolo
            'actual
            str_Devolucion = str_Devolucion & vbCrLf & vbTab & _
                str_ProxyProtocolo
        Next
        
    Else
        
        'La configuración es la misma para todos los puertos. Agregamos
        'la configuración a la devolucion
        str_Devolucion = "Servidor Proxy: " & str_Proxy & vbCrLf & _
                         "Se usa el mismo servidor Proxy para todos los protocolos"
                         
    End If
    
    'Iniciamos como cadena vacía el valor de las excepciones
    str_Excepciones = ""
    
    'Si ni hay excepciones ni se omite el uso de proxy en direcciones
    'locales, el valor que vamos a consultar ahora no existirá, lo que 
    'provoca un error. Por ello establecemos control de errores
    On Error Resume Next
    
    'Obtenemos las excepciones
    str_Excepciones = obj_SH.RegRead("HKCU\Software\Microsoft\W" & _
                             "indows\CurrentVersion\Internet Se" & _
                             "ttings\ProxyOverride")
                             
    'Una vez hecho el intento de leer el valor, devolvemos el control
    'de errores al intérprete de VbScript
    On Error Goto 0
    
    'Si hay excepciones
    If Len(str_Excepciones) > 0 Then
    
        'Creamos un array con las excepciones
        arr_Excepciones = Split(str_Excepciones,";")
        
        'Ponemos a false la booleana que indica si se omite el uso de proxy
        'en direcciones locales
        bol_OmitirLocal = False
        
        'Recorremos el array
        For Each str_Excepcion In arr_Excepciones
        
            'Comprobamos que el valor no sea "<local>", pues este
            'valor indica que se ha activado la casilla de omitir proxy
            'en direcciones locales, no es una excepción que se configure
            'en la caja de texto de excepciones
            If LCase(str_Excepcion) <> "<local>" Then
            
                'Agregamos la excepción a la devolución de excepciones
                str_DevolucionExcepciones = str_DevolucionExcepciones & vbCrLf _
                                            & vbTab & str_Excepcion
                                 
            Else
            
                'Marcamos a true la booleana que indica si se omite el uso
                'de proxy en direcciones locales 
                bol_OmitirLocal = True
                
            End If
            
        Next
        
        'Si se han econtrado excepciones las agregamos a la devolución
        If Len(str_DevolucionExcepciones) > 0 Then
        
            str_Devolucion = str_Devolucion & vbCrLf & "Excepciones:" & _
                             str_DevolucionExcepciones
            
        Else
        
            'Se muestra que no hay definidas excepciones
            str_Devolucion = str_Devolucion & vbCrLf & _
                             "Excepciones: No definidas"
        
        End If
        
        'Agregamos a la devolución si se omite o no el proxy en las direcciones
        'locales
        If bol_OmitirLocal Then
        
            str_Devolucion = str_Devolucion & vbCrLf & _
                        "Se omitirá el uso de proxy en direcciones locales"
                        
        Else
        
            str_Devolucion = str_Devolucion & vbCrLf & _
                        "No se omitirá el uso de proxy en direcciones locales"
                        
        End If
    
    Else
    
        'Se muestra que no hay definidas excepciones ni está activado el
        'ignorar el proxy para direcciones locales
        str_Devolucion = str_Devolucion & vbCrLf &  _
                         "Excepciones: No definidas" & vbCrLf & _
                         "No se omitirá el uso de proxy en direcciones locales"
        
    End If
    
End If

'Ponemos al principio de la devolución si el proxy está o no habilitado
str_Devolucion = "Proxy habilitado: " & CBool(dbl_Enabled) & vbCrLf & _
                 str_Devolucion

'Ponemos al principio de la devolución el nombre de equipo y de usuario.
'Para obtenerlos usaremos un objeto WshNetwork
Set obj_NW = CreateObject("WScript.Network")
str_Devolucion = "Equipo: " & obj_NW.ComputerName & vbCrLf & _
                 "Usuario: " & obj_NW.UserDomain & "\" & _
                               obj_NW.UserName & vbCrLf & _
                 str_Devolucion

'Mostramos los resultados
WScript.Echo str_Devolucion

2 comentarios to “Script VbScript para obtener la configuración de Proxy de IE del usuario que lo ejecuta”

  1. Luis Serrano said

    esta muy bueno el script, pero adjunto uno más pequeño, que permite tomar la informaicón y cambiar los datos:

    dim strProxyServer
    ‘ define el proxy y el puerto si es necesario
    strProxyServer = “192.168.1.250:8081”
    ‘ ubicacion en la registry
    dim strRegPath
    strRegPath = “HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\”
    Set oWshShell = CreateObject(“WScript.Shell”)
    ‘ Muestra cual es el proxy actual
    ‘msgbox “Proxy Actual: ” & oWshShell.RegRead(“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer”)
    ‘ modifica las entradas en el registro
    Call oWshShell.RegWrite(strRegPath & “ProxyEnable”, “00000001”, “REG_DWORD”)
    Call oWshShell.RegWrite(strRegPath & “ProxyOverride”, “”, “REG_SZ”)
    Call oWshShell.RegWrite(strRegPath & “ProxyServer”, strProxyServer, “REG_SZ”)
    ‘Msgbox “Proxy actual” & stractual
    ‘ notificacion
    ‘wscript.echo “Configuración de Proxy, Realizada. ” & strProxyServer
    ‘Msgbox “Configuración de Proxy, Realizada. ” & VbCrLf & “Server – ” & strProxyServer
    ‘ destroy
    Set oWshShell = Nothing

  2. Edu said

    A mí me tarda como 20 – 30 segundos en hacer el cambio efectivo desde que lo ejecuto hasta que me meto en la configuración del proxy desde internet explorer. ¿Alguna idea de qué puede ser?

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: