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 Cambiar Una Variable de Entorno

Posted by urpiano en Martes 27 \27\UTC febrero \27\UTC 2007

Este script es una demostración más de la ventaja que supone el uso de WMI para realizar tareas administrativas, dada la capacidad que tenemos para hacerlo en equipos remotos y usando las credenciales que necesitemos, de manera que podemos, desde un mismo equipo, realizar estas tareas en todos aquellos equipos que necesitemos, sin tener que asignarles un script de inicio o desplazándonos de equipo en equipo. En concreto, este script nos permite cambiar el valor de cualquier variable de entorno de el equipo local o tantos equipos remotos que queramos ¡sin mover el culo de nuestra silla! Para no jugar con fuego, el script no toca las variables del usuario SYSTEM, Servicio de red y Servicio local (bastaría un ligero retoque del script para que sí se les cambiara a esos usuarios)

El script ha nacido por la necesidad que planteaba Antonio ceacero en el grupo de noticias microsoft.public.es.win2000:Hola grupo,

Existe alguna forma de centralizar todos los temporales de usuarios, en una misma carpeta, indiferentemente del usuario activo. Es decir, pasar del %userprofile% y usar una creada por un administrador, tal como C:Temp.

Gracias,

¡Gracias a tí, Antonio, por sugerirme este script! Así que una vez me pusieron el trapo rojo por delante, me lancé a la tarea y este es el resultado. El script permite cambiar una variable de entorno (TEMP o cualquier otra) que se recibe como parámetro requerido a un valor también recibido como parámetro requerido. De forma opcional, se puede también pasar el/los nombre/s del/los equipo/s en el/los que se quiere cambiar el valor de esa variable (se pueden poner los nombres de los equipos en la línea de comando o en un fichero de texto, uno por línea). Otra opción es la de especificar el usuario que se conectará a WMI para realizar la tarea, cosa interesante para operar con equipos remotos; si se especifica el usuario, también se puede especificar su contraseña, si no se hace será solicitada. La última opción es la de cambiar el valor de la variable de entorno sólo a un usuario, usuario que podemos suministrar en formato WinNT (dominiousuario). La salida es en formato de valores separados por tabuladores, lo que hace que, si la redirigimos a un fichero, éste se pueda ver muy bien desde Excel

Bueno, menos literatura y vamos al turrón…

'******************************************************************
'cambiar-variable-de-entorno.vbs

'Script VBScript que cambia el valor de una variable de entorno de
'usuario
'
'Sintaxis
'
'{wscript | cscript [//nologo]} [/E:equipos] [/F:fichero equipos]
'      [/U:usuario de conexion [/C:contraseña]] [/?] /V:variable
'      /D:valor [/N:nombre de usuario]
'
'Siendo
'
'    - /E: opcional. Lista de equipos a los que se quiere cambiar
'                    la variable de entorno. Esta lista son los nombres
'                    de los equipos separados por comas. Si se omite
'                    este parámetro y también el parámetro /F, se
'                    realizará en el equipo local.
'
'    - /F: opcional. Nombre de un fichero de texto en el que está
'                    la lista de equipos a los que se debe cambiar
'                    la variable de entorno. Los nombres deben ser
'                    NetBios y ha de ir un equipo por línea. Si se
'                    omite este parámetro y también el parámetro
'                    /E, se realizará en el equipo local.
'
'    - /U: opcional. Nombre del usuario que se utilizará para conectar
'                    con el servicio WMI del equipo. En caso de
'                    omitirse se utilizará el usuario que lanza el
'                    script.
'
'    - /C: opcional. Cuando está establecido el parámetro U, este
'                    parámetro nos permite especificar la contraseña
'                    del usuario que conectará con el servicio WMI.
'                    Si no está especificado el parámetro U se
'                    ignorará. Si está establecido el parámetro U
'                    y este parámetro es omitido, el script presentará
'                    una ventana de Internet Explorer donde entrar la
'                    contraseña. Es recomendable no usar este parámetro,
'                    pues implica que se teclea la contraseña y alguien
'                    puede verla; como el usuario debe tener derechos
'                    administrativos, es peligroso que tengamos la
'                    la contraseña expuesta. Al usar una ventana de IE
'                    para teclear la contraseña, esto se realiza en
'                    una caja de texto de tipo password, quedando
'                    enmascarada, protegida de ojos indiscretos.
'
'    - /V: requerido. Nombre de la variable de entorno a cambiar (Ej.
'                     TEMP)
'
'    - /D: requerido. Dato que contiene la variable (Ej. "c:Temp")
'
'    - /N: opcional. Nombre del usuario al que se quiere cambiar la
'                    variable. En caso de omitirse se cambiará a todos
'                    los usuarios del equipo excepto a SYSTEM,
'                    Servicio local y Servicio de Red.
'
'    - /?: opcional. Muestra la ayuda en línea.
'
'Nota1: si se incluyen los parámetros /E y/F a la vez, prevalecerá
'      el parámetro /F
'
'Nota2: en el equipo local no se puede conectar a WMI con credenciales
'       alternativas. Si el usuario que estña lanzando el script no
'       tiene privilegios suficientes para poder ejecutarlo, se debe
'       usar RunAs. Con equipos remots no hay problema en usar
'       credenciales alternativas
'
'Ejemplos:
'
'- Cambiamos TEMP a c:Temp
'
'wscript cambiar-variable-de-entorno.vbs /V:TEMP /D:c:Temp
'
'- Cambiamos TEMP a c:Temp en los equipo snaug, grima y saruman
'
'cscrip //nologo cambiar-variable-de-entorno.vbs /E:snaug,grima,saruman
'        /V:TEMP /D:c:Temp
'
'- Cambiamos TEMP a c:Temp en los equipos del fichero recibido
'  como parámetro /F utilizando las credenciales del usuario rohantheoden
'
'cscript cambiar-variable-de-entorno.vbs /F:c:ListadosRohan.txt
'     /U:rohantheoden /V:TEMP /D:c:Temp
'
'- Cambiamos TEMP a c:Temp en los equipos del fichero recibido como
'  parámetro /F utilizando las credenciales del usuario mordorreybrujo y
'  suministrando su contraseña
'
'cscript cambiar-variable-de-entorno.vbs /F:cListadosCirithUngol.txt
'             /U:mordorreybrujo /C:"soy malisimo" /V:TEMP /D:c:Temp
'
'- Cambiamos TEMP a c:Temp al usuario "isengargrima" en los equipos
'  del fichero recibido como parámetro /F, utilizando las credenciales
'  del usuario isengarsaruman y suministrando su contraseña
'
'cscript cambiar-variable-de-entorno.vbs /F:cListadosCirithUngol.txt
'             /U:isengarsaruman /C:"Mago Malo" /V:TEMP /D:c:Temp
'             /N:isengargrima
'
'© Fernando Reyes - Marzo de 2007
'***************************************************************************

'Requerimos la declaración de variables
Option Explicit

'Declaración de variables
Dim str_Variable, str_Usuario, str_Clave, str_Nombre
Dim arr_Equipos, str_Resumen, str_Devolucion, str_Dato
Dim obj_ServicioWMI, str_Equipo

'Si se pide la ayuda en línea, mostrarla es lo único que se hará
If WScript.Arguments.Named.Exists("?") Then

    Call s_Ayuda("|*********************|" & vbCrLf & _
                 "|*       Ayuda       *|" & vbCrLf & _
                 "|*********************|")
    WScript.Quit 0

End If

'Verificamos la recepción de los parámetros requeridos
'Primero el de variable de entorno
If Not WScript.Arguments.Named.Exists("V") Then

	str_Devolucion = "/V: variable " & _
	                 "a cambiar." & vbCrLf

Else

    str_Variable = WScript.Arguments.Named("V")

End If

'Verificamos la recepción de los parámetros requeridos
'Ahora el de valor a poner a la variable
If Not WScript.Arguments.Named.Exists("D") Then

	str_Devolucion = str_Devolucion & _
	                "/D: valor " & _
	                 "a establecer." & vbCrLf

Else

    str_Dato = WScript.Arguments.Named("D")

End If

'Vemos si falta alguno de los parámetros requeridos
'en caso afirmativo
If Len(str_Devolucion) > 0 Then

    Call s_Ayuda("Error 1 - ausencia de parámetro/s" & _
                 " requerido/s. Falta/n: " & _
                 vbCrLf & vbCrLf & str_Devolucion)
    WScript.Quit 1

End If

'Recogemos ahora los parámetros opcionales

'Primero el nombre de usuario al que se le cambiará la
'variable de entorno
If WScript.Arguments.Named.Exists("N") Then _
          str_Nombre = WScript.Arguments.Named("N")

'Primero el nombre de usuario al que se le cambiará la
'variable de entorno
If WScript.Arguments.Named.Exists("N") Then 

    str_Nombre = WScript.Arguments.Named("N")

Else

    str_Nombre = ""

End If

'Vemos ahora si hemos recogido lista de equipos
If WScript.Arguments.Named.Exists("E") _
Or WScript.Arguments.Named.Exists("F") Then

    'Primero miramos si está el parámetro F, fichero con
    'la lista de equipo, y de existir procesaremos los
    'equipos que contenga. De esta manera hacemos que
    'sea ignorado parámetro E, si está presente
    If WScript.Arguments.Named.Exists("F") Then

        'Obtenemos la lista de equipos desde el fichero,
        'verificando que la función que lo lee devuelve
        'True, pues si devuelve False es que no se ha podido
        'abrir el fichero y por tanto debemos terminar
        'el script
        If Not f_LeeFichero(WScript.Arguments.Named("F"), _
                            str_Equipo) Then

            WScript.Echo "Error 1: No se pudo abrir el " & _
                         "fichero con la lista de equipos"
            WScript.Quit 1

        Else

            'Se pudo abrir el fichero; hacemos Split considerando
            'la coma como separador para así tener la lista como
            'un array
            arr_Equipos = Split(str_Equipo,",")

        End If

    Else

            'Cargamos la lista haciendo Split y considerando la coma
            'como separador de elementos
            arr_Equipos = Split(WScript.Arguments.Named("E"),",")

    End If

Else

    'si no se han recibido ni /E ni /F, establecemos el equipo local
    arr_Equipos = Array(".")

End If

'Miramos si se ha recibido el parámetro de usuario de conexión a
'WMI
If WScript.Arguments.Named.Exists("U") Then

    'Como se ha recibido, lo recogemos
    str_Usuario = WScript.Arguments.Named("U")

    'Miramos si se ha recibido contraseña
    If WScript.Arguments.Named.Exists("C") Then

        'si se ha recibido lo recogemos
        str_Clave = WScript.Arguments.Named("C")

    Else

        'Como no se ha recibido, llamamos a la función
        'que pedirá al usuario que entre la contraseña
        str_Clave= f_EntrarClave("\fernandor-fcom" & _
                             "partidousuario-conexion.htm")

    End If

'No se ha recibido parámetro de usuario, dejamos las
'variables vacías
Else

    str_Usuario = ""
    str_Clave = ""

End If

'Iniciamos la variable que irá almacenando los resultados
'del proceso; será usada para presentar el resumen al final
str_Resumen = vbCrLf & vbCrLf & _
              "Nom. equipo" & vbTab & "Usuario" & vbTab & _
              "Variable" & vbTab & "Valor" & vbTab & _
              "Resultado" & vbCrLf & _
              "===========" & vbTab & "=======" & vbTab & _
              "========" & vbTab & "=====" & vbTab & _
              "=========" & vbCrLf

'Recorremos la lista de nombres de equipos
For Each str_Equipo In  arr_Equipos

    'Vaciamos la variable con la devolución del resultado
    'del equipo anterior
    str_Devolucion = ""

    'Llamamos al procedimiento encargado de cambiar la letra
	Call s_ProcesaEquipo(str_Variable, str_Dato, _
	                     str_Equipo, str_Usuario, _
	                     str_Clave, str_Nombre, _
	                     str_Devolucion)

	'Añadimos el resultado del equipo actual al resumen
	str_Resumen = str_Resumen & str_Devolucion & vbCrLf

Next

'Mostramos el resumen
WScript.Echo str_Resumen

Sub s_ProcesaEquipo(str_Variable, str_Datos, _
                    str_Equipo, str_Usuario, _
                    str_Clave, str_Nombre, _
                    str_Devolucion)

    'Constantes para la forma de consultar con
    'WQL al servicio WMI
    Const wbemFlagReturnImmediately = &h10
    Const wbemFlagForwardOnly = &h20

    'Declaración de variables
    Dim obj_ServicioWMI, col_Variables, obj_Variable

    'Llamamos a la función que nos permite cargar el objeto
    'servicio WMI. Si la función devuelve False es que no se
    'ha podido crear
    If Not f_ServicioWMI(obj_ServicioWMI, _
                         str_Usuario, _
                         str_Clave, _
                         str_Equipo) Then

        'Lanzamos el mensaje de que ha habido un error en la conexión
        'al servicio WMI
        Wscript.Echo "Error 2: error al conectar con el servicio WMI"

        'Terminamos el script con el código de error 2
        WScript.Quit 2

    End If

    'Hacemos una consulta WQL de las variables de entorno
    Set col_Variables = obj_ServicioWMI.ExecQuery( _
                                           "SELECT * FROM " & _
                                               "Win32_Environment", _
                     "WQL", wbemFlagForwardOnly + wbemFlagReturnImmediately) 

    'Recorremos las variables de entorono
    For Each obj_Variable in col_Variables

        'Este if comprueba que estemos en la variable que se recibió
        'como parámetro y, que el usuario sea el recibido como parámetro
        'o que no haya usuario como parámetro y evita que se apliquen los
        'cambios a los usuarios SYSTEM, Servicio local y Servicio de red
        If UCase(obj_Variable.Name) = UCase(str_Variable) _
        And (str_Nombre = "" _
             Or _
             UCase(obj_Variable.UserName) = UCase(str_Nombre)) _
       And Not ((Left(Ucase(obj_Variable.UserName),12) = "NT AUTHORITY") _
             Or _
               (Instr(1,Ucase(obj_Variable.UserName),"SYSTEM") > 0)) Then


            'Cambiamos la variable a su nuevo valor
            obj_Variable.VariableValue = str_Dato
            
            'Validamos el cambio
            obj_Variable.Put_

            'Recogemos el cambio en la devolucion
            str_Devolucion = str_Equipo & vbTab & obj_Variable.UserName & vbTab & _
                             str_Variable & vbTab & str_Dato & vbTab & _
                             "Cambiado"

        End If

    Next

    'Si no se ha producido ningún cambio, lo recogemos en la devolucion
    If Len(str_Devolucion) = 0 Then str_Devolucion = str_Equipo & vbTab & "No se cambió"

    Set obj_Variable = Nothing
    Set col_Variables = Nothing

End Sub 's_ProcesaEquipo

Sub s_Ayuda(str_Texto)

    WScript.Echo vbCrLf & vbCrLf

    'Si se ha recibido algún texto lo mostramos y lo separamos de la
    'ayuda con dos saltos de línea
    If Len(str_Texto) > 0 Then _
                           WScript.Echo str_Texto & vbCrLf & vbcrlf

    WScript.Echo "cambiar-variable-de-entorno.vbs"
    WScript.Echo ""
    WScript.Echo "Script VBScript que cambia el v" & _
                 "alor de una variable de entorno de "
    WScript.Echo "usuario"
    WScript.Echo ""
    WScript.Echo "Sintaxis"
    WScript.Echo ""
    WScript.Echo "{wscript | cscript [//nologo]} " & _
                 "[/E:equipos] [/F:fichero equipos]"
    WScript.Echo "      [/U:usuario de conexion [/C" & _
                 ":contraseña]] [/?] /V:variable"
    WScript.Echo "      /D:valor [/N:nombre de usua" & _
                 "rio]"
    WScript.Echo ""
    WScript.Echo "Siendo"
    WScript.Echo ""
    WScript.Echo "    - /E: opcional. Lista de equi" & _
                 "pos a los que se quiere cambiar "
    WScript.Echo "                    la variable d" & _
                 "e entorno. Esta lista son los nombres"
    WScript.Echo "                    de los equipo" & _
                 "s separados por comas. Si se omite"
    WScript.Echo "                    este parámetr" & _
                 "o y también el parámetro /F, se "
    WScript.Echo "                    realizará en " & _
                 "el equipo local."
    WScript.Echo ""
    WScript.Echo "    - /F: opcional. Nombre de un " & _
                 "fichero de texto en el que está"
    WScript.Echo "                    la lista de e" & _
                 "quipos a los que se debe cambiar"
    WScript.Echo "                    la variable d" & _
                 "e entorno. Los nombres deben ser "
    WScript.Echo "                    NetBios y ha d" & _
                 "e ir un equipo por línea. Si se"
    WScript.Echo "                    omite este par" & _
                 "ámetro y también el parámetro"
    WScript.Echo "                    /E, se realiza" & _
                 "rá en el equipo local."
    WScript.Echo ""
    WScript.Echo "    - /U: opcional. Nombre del us" & _
                 "uario que se utilizará para conectar"
    WScript.Echo "                    con el servic" & _
                 "io WMI del equipo. En caso de"
    WScript.Echo "                    omitirse se u" & _
                 "tilizará el usuario que lanza el"
    WScript.Echo "                    script."
    WScript.Echo ""
    WScript.Echo "    - /C: opcional. Cuando está es" & _
                 "tablecido el parámetro U, este "
    WScript.Echo "                    parámetro nos " & _
                 "permite especificar la contraseña"
    WScript.Echo "                    del usuario qu" & _
                 "e conectará con el servicio WMI."
    WScript.Echo "                    Si no está esp" & _
                 "ecificado el parámetro U se "
    WScript.Echo "                    ignorará. Si e" & _
                 "stá establecido el parámetro U"
    WScript.Echo "                    y este parámet" & _
                 "ro es omitido, el script presentará"
    WScript.Echo "                    una ventana de" & _
                 " Internet Explorer donde entrar la"
    WScript.Echo "                    contraseña. Es" & _
                 " recomendable no usar este parámetro,"
    WScript.Echo "                    pues implica qu" & _
                 "e se teclea la contraseña y alguien"
    WScript.Echo "                    puede verla; c" & _
                 "omo el usuario debe tener derechos"
    WScript.Echo "                    administrativos" & _
                 ", es peligroso que tengamos la"
    WScript.Echo "                    la contraseña e" & _
                 "xpuesta. Al usar una ventana de IE"
    WScript.Echo "                    para teclear l" & _
                 "a contraseña, esto se realiza en"
    WScript.Echo "                    una caja de tex" & _
                 "to de tipo password, quedando"
    WScript.Echo "                    enmascarada, pr" & _
                 "otegida de ojos indiscretos."
    WScript.Echo ""
    WScript.Echo "    - /V: requerido. Nombre de la v" & _
                 "ariable de entorno a cambiar (Ej."
    WScript.Echo "                     TEMP)"
    WScript.Echo ""
    WScript.Echo "    - /D: requerido. Dato que conti" & _
                 "ene la variable (Ej. ""c:Temp"")"
    WScript.Echo ""
    WScript.Echo "    - /N: opcional. Nombre del usua" & _
                 "rio al que se quiere cambiar la"
    WScript.Echo "                    variable. En ca" & _
                 "so de omitirse se cambiará a todos"
    WScript.Echo "                    los usuarios de" & _
                 "l equipo excepto a SYSTEM, "
    WScript.Echo "                    Servicio local " & _
                 "y Servicio de Red."
    WScript.Echo ""
    WScript.Echo "    - /?: opcional. Muestra la ayud" & _
                 "a en línea."
    WScript.Echo ""
    WScript.Echo "Nota1: si se incluyen los parámetro" & _
                 "s /E y/F a la vez, prevalecerá"
    WScript.Echo "      el parámetro /F"
    WScript.Echo ""
    WScript.Echo "Nota2: en el equipo local no se pue" & _
                 "de conectar a WMI con credenciales"
    WScript.Echo "       alternativas. Si el usuario " & _
                 "que está lanzando el script no"
    WScript.Echo "       tiene privilegios suficiente" & _
                 "s para poder ejecutarlo, se debe"
    WScript.Echo "       usar RunAs. Con equipos remo" & _
                 "tos no hay problema en usar"
    WScript.Echo "       credenciales alternativas"
    WScript.Echo ""
    WScript.Echo "Ejemplos:"
    WScript.Echo ""
    WScript.Echo "- Cambiamos TEMP a c:Temp"
    WScript.Echo ""
    WScript.Echo "wscript cambiar-variable-de-entorno" & _
                 ".vbs /V:TEMP /D:c:Temp"
    WScript.Echo ""
    WScript.Echo "- Cambiamos TEMP a c:Temp en los e" & _
                 "quipo snaug, grima y saruman"
    WScript.Echo ""
    WScript.Echo "cscrip //nologo cambiar-variable-de-" & _
                 "entorno.vbs /E:snaug,grima,saruman " & _
                 "/V:TEMP /D:c:Temp"
    WScript.Echo ""
    WScript.Echo "- Cambiamos TEMP a c:Temp en los e" & _
                 "quipos del fichero recibido"
    WScript.Echo "  como parámetro /F utilizando las" & _
                 " credenciales del usuario rohantheoden"
    WScript.Echo ""
    WScript.Echo "cscript cambiar-variable-de-entor" & _
                 "no.vbs /F:c:ListadosRohan.txt " & _
                 "/U:rohantheoden /V:TEMP /D:c:Temp"
    WScript.Echo ""
    WScript.Echo "- Cambiamos TEMP a c:Temp en los equ" & _
                 "ipos del fichero recibido como"
    WScript.Echo "  parámetro /F utilizando las credenc" & _
                 "iales del usuario mordorreybrujo y"
    WScript.Echo "  suministrando su contraseña"
    WScript.Echo ""
    WScript.Echo "cscript cambiar-variable-de-entorno." & _
                 "vbs /F:cListadosCirithUngol.txt " & _
                 "/U:mordorreybrujo /C:""soy malisim" & _
                 "o"" /V:TEMP /D:c:Temp"
    WScript.Echo ""
    WScript.Echo "- Cambiamos TEMP a c:Temp al usuar" & _
                 "io ""isengargrima"" en los equipos"
    WScript.Echo "  del fichero recibido como parámetr" & _
                 "o /F, utilizando las credenciales"
    WScript.Echo "  del usuario isengarsaruman y sumi" & _
                 "nistrando su contraseña"
    WScript.Echo ""
    WScript.Echo "cscript cambiar-variable-de-entorno." & _
                 "vbs /F:cListadosCirithUngol.txt " & _
                 "/U:isengarsaruman /C:""Mago Malo"" " & _
                 "/V:TEMP /D:c:Temp /N:isengargrima"
    WScript.Echo ""
    WScript.Echo "© Fernando Reyes - Marzo de 2007"
    WScript.Echo ""

End Sub 's_Ayuda

Function f_EntrarClave(str_HTML)
'El propósito de esta función es el proveer al usuario de una caja
'de texto en la que teclear una contraseña sin revelarla, pues
'la caja de texto es de tipo password. Para ello se crea una página
'web que es cargada en un Internet Explorer y se recoge de éste
'la contraseña tecleada y se convierte en la devolucion de la función.
'La ruta y nombre de la página es recibida como parámetro por la
'función, lo que permite reutilizar esta función en más scripts y
'personalizar la página para cada script, lo único que debe ser igual
'en todas las páginas que se quieran utilizar es que el botón debe
'llamarse Aceptar, el control oculto AceptarPulsado y la caja de texto
'Clave.

'Esta función está basada en:
'http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_lppm.mspx?mfr=true

'En el ejemplo de TechNet se pone una ruta local (c:carpetafichero.asp)
'para la ubicación del fichero. Esto no es correcto cuando estamos de
'XP SP2 en adelante, pues la navegación segura interfiere con el script,
'Ya que contiene un script VBScript. Para evitar esto, yo lo que hago
'es situar el fichero en una carpeta compartida y acceder a él con su
'ruta UNC; de esta manera es tratado como de la zona de intranet y no
'hay problemas. También se podría colocar en un servidor Web que fuese
'de la intranet o de los sitios de confianza y referirse a él por su
'ruta http

    'Declaramos variables
    Dim obj_IE

    'Creamos un objeto Internet Explorer
    Set obj_IE = WScript.CreateObject _
              ("InternetExplorer.Application", "IE_")

    'Cargamos el navegador con la página recibida como parámetro
    obj_IE.Navigate "file:///" & str_HTML

    'Con este bucle esperamos a que la página esté completamente cargada
    Do

        WScript.Sleep 10

    Loop Until obj_IE.ReadyState = 4    

    'Establecemos propiedades del navegador
    obj_IE.ToolBar = 0
    obj_IE.StatusBar = 0
    obj_IE.Width = 400
    obj_IE.Height = 250
    obj_IE.Left = 0
    obj_IE.Top = 0
    obj_IE.Visible = 1

    'En este bucle esperamos a que se haya pulsado el botón
    '"Aceptar"
    Do While (obj_IE.Document.All.AceptarPulsado.Value = "")

        WScript.Sleep 250

    Loop

    'Recogemos la contraseña entrada
    str_Clave = obj_IE.Document.All.Clave.Value

    'Cerramos el navegador
    obj_IE.Quit

    'Esperamos a que esté cerrado
    WScript.Sleep 250

    'Establecemos la contraseña como devolución de la función
    f_EntrarClave = str_Clave  

    'Limpiadita de culito :-)
    Set obj_IE = Nothing

End Function 'f_EntrarClave

Function f_ServicioWMI(obj_ServicioWMI, str_Usuario, _
                       str_Clave, str_Equipo)
'Esta función permite conectar con el servicio WMI de un equipo.
'La conexión puede ser realizada directamente por el usuario
'que ha lanzado el script o por otro usuario cuyas credenciales
'son recibidas como parámetros. La función recibe como parámetro
'un objeto que será utilizado como parámetro de salida, siendo
'creado por la función como objeto de servicio WMI del equipo
'recibido como parámetro

    Dim obj_LocalizadorWMI
    Dim lng_Respuesta

    'Si hemos recibido nombre de usuario, debemos conectar
    'al servicio WMI del equipo como el usuario
    'recibido
    If Len(str_Usuario) > 0 Then

        'Para poder especificar unas credenciales alternativas,
        'debemos crear primero un localizador WMI
        Set obj_LocalizadorWMI = CreateObject( _
                                  "WbemScripting.SWbemLocator")

        'Establecemos control de errores
        On Error Resume Next
        'Conectamos con el servicio WMI del equipo con las
        'credenciales pasadas
        Set obj_ServicioWMI = obj_LocalizadorWMI.ConnectServer( _
                                       str_Equipo, "rootcimv2", _
                                       str_Usuario, str_Clave)

        'Si se ha producido algún error...
        If Err.Number <> 0 Then

            'Lo primero es vaciar la variable con el localizador WMI
            Set obj_LocalizadorWMI = Nothing

            'Mostramos el error
            WScript.Echo vbCrLf & vbCrLf & _
                         Err.Number & ": " & Err.Description

            'Vaciamos el objeto Err
            Err.Clear

            'Devolvemos False
            f_ServicioWMI = False

            'Salimos de la función
            Exit Function

        End If

    Else

        'Podemos conectar directamente con el servicio WMI del equipo
        'sin necesidad de utilizar el localizador WMI ya que no hay
        'que hacerlo con otras credenciales distintas a las del
        'usuario que lanza el script
        Set obj_ServicioWMI = GetObject("winmgmts:\" & str_Equipo & _
                                        "rootCIMV2")

        'si se ha producido algún error...
        If Err.Number <> 0 Then

            'Mostramos el error
            WScript.Echo Err.Number & ": " & Err.Description & _
                         vbCrLf & vbCrLf

            'Vaciamos el objeto Err
            Err.Clear

            'Devolvemos False
            f_ServicioWMI = False

            'Salimos de la función
            Exit Function

        End If

    End If

    'No se han producido errores, devolvemos True
    f_ServicioWMI = True

    'Limpieza de culito :-)
    Set obj_LocalizadorWMI = Nothing

End Function 'f_ServicioWMI

Function f_LeeFichero(str_Fichero, str_Contenido)
'Esta función recibe una ruta y nombre de fichero de
'texto, y una variable usada como salida para almacenar
'el contenido del fichero. Devuelve True si hubo éxito
'al leer el fichero y False en caso contrario

    Dim obj_FS, obj_TS

    'Creamos un objeto FileSysteObject
    Set obj_FS = CreateObject("scripting.filesystemobject")

    'Establecemos control de errores
    On Error Resume Next

    'Cargamos el fichero en el objeto TextStream
    Set obj_TS = obj_FS.OpenTextFile(str_Fichero, 1)

    'Si no ha habido errores...
    If Err.Number = 0 Then

        'Ponemos el contenido del fichero en la variable de
        'salida, sustituyendo los saltos de línea por comas,
        'preparando la jugada para el uso de Split
        str_Contenido = Replace(obj_TS.ReadAll,vbCrLf,",")

        'Como ha habido éxito la función devuelve True
        f_LeeFichero = True

        'Cerramos el fichero
        obj_TS.Close

    Else

        'Ha habido un error a la hora de abrir el fichero.
        'Mostramos el número y descripción del error
        WScript.Echo "Error " & Err.Number & _
                     ": " & Err.Description

        'Como ha habido error la función devuelve False
        f_LeeFichero = False 

        'Limpiamos errores
        Err.Clear           

    End If

    'Cleaning butt :-)
    Set obj_TS = Nothing
    Set obj_FS = Nothing

End Function 'f_LeeFichero

2 comentarios to “Script VBScript Para Cambiar Una Variable de Entorno”

  1. Idetrorce said

    very interesting, but I don’t agree with you
    Idetrorce

  2. urpiano said

    Idetroce,

    Can you explain me why you don’t agree?

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