Skip to content

2. Los entornos de ejecución de VBSCRIPT

2.1. Introduction

Un programa vbscript no se ejecuta directamente en Windows, sino en un contenedor que le proporciona un contexto de ejecución y una serie de objetos propios. Además, el programa VBScript puede utilizar objetos que el sistema Windows pone a su disposición, denominados objetos ActiveX.

En este documento, utilizaremos dos contenedores: Windows Scripting Host, comúnmente denominado WSH, y el navegador Internet Explorer, al que en lo sucesivo a veces nos referiremos como IE. Existen muchos otros. Por ejemplo, las aplicaciones de MS-Office son contenedores para una variante de VB llamada VBA (Visual Basic para Aplicaciones). Además, existen numerosas aplicaciones de Windows que permiten a sus usuarios superar las limitaciones del sistema al permitirles desarrollar programas que se ejecutan dentro de la aplicación y utilizan los objetos propios de esta.

El contenedor en el que se ejecuta el programa VBScript desempeña un papel fundamental:

  • Los objetos que el contenedor pone a disposición del programa VBScript varían de un contenedor a otro. Así, WSH pone a disposición de un programa VBS un objeto llamado WScript que da acceso, por ejemplo, a los recursos compartidos y a las impresoras de red de la máquina anfitriona. Por su parte, IE pone a disposición del programa VBS un objeto llamado document que representa la totalidad del documento HTML que se está visualizando. El programa VBS podrá entonces manipular este documento. Excel, por su parte, pone a disposición de un programa VBA objetos que representan libros, hojas de trabajo, gráficos, etc.; en resumen, todos los objetos que maneja Excel.
  • Si bien los objetos de un contenedor le brindan toda su potencia a un programa de VBScript, en ocasiones pueden limitar ciertas áreas. Por ejemplo, un programa de VBScript ejecutado en el navegador IE no puede acceder al disco de la máquina anfitriona, por razones de seguridad.

Por lo tanto, cuando se habla de programación en VBScript, es necesario indicar en qué contenedor se ejecuta el programa.

En Windows, VBScript no es el único lenguaje que se puede utilizar en los contenedores WSH o IE. Por ejemplo, se puede utilizar JScript (=JavaScript), PerlScript (=Perl), Python, etc. A primera vista, muchos de estos lenguajes parecen superiores a VBScript. Sin embargo, este último cuenta con importantes ventajas:

  • VB y sus variantes VBSCRIPT y VBA están muy extendidas en las computadoras con Windows. Conocer este lenguaje parece indispensable.
  • Es más bien la variedad de objetos que un programa puede utilizar, más que el lenguaje en sí, lo que determina su potencia. Sin embargo, muchos de estos objetos son proporcionados por los contenedores y no por los lenguajes mismos.

Una desventaja de VBSCRIPT es que no es portátil a un sistema distinto de Windows, como por ejemplo Unix. Sus competidores, JavaScript, Perl y Python, sí lo son. Si se debe trabajar en sistemas heterogéneos, puede ser interesante, o incluso indispensable, utilizar el mismo lenguaje en los distintos sistemas.

2.2. El contenedor WSH

El contenedor WSH (Windows Scripting Host) permite ejecutar, dentro de Windows, programas escritos en diversos lenguajes: VBScript, JavaScript, PerlScript, Python, etc. Existe un estándar que debe cumplirse para que un lenguaje pueda utilizarse dentro de WSH. Cualquier lenguaje que cumpla con esta norma puede ejecutarse en WSH. Es posible que la lista anterior de lenguajes que se ejecutan en WSH se amplíe. Un contenedor pone a disposición de los programas que ejecuta una serie de objetos que les otorgan su verdadero poder. Esto tiende a difuminar las diferencias entre lenguajes, ya que todos utilizan entonces el mismo conjunto de objetos. Utilizar un lenguaje en lugar de otro puede convertirse así en una simple cuestión de preferencia personal más que de rendimiento.

La ejecución de un programa en WSH se realiza mediante dos ejecutables: wscript.exe y cscript.exe. wscript.exe se encuentra normalmente en el directorio de instalación de Windows, que por lo general se llama %windir%:


C:\ >echo %windir%
C:\WINDOWS

C:\>dir c:\windows\wscript.exe
WSCRIPT  EXE       123 280  19/09/01  11:54 wscript.exe

L'exécutable cscript.exe se trouve lui sous %windir%\command :

C:\>dir c:\windows\cscript.* /s

Répertoire de C:\WINDOWS\COMMAND
CSCRIPT  EXE       102 450  26/06/01  17:49 cscript.exe

La «w» de wscript significa windows y la «c» de cscript significa console. Un script se puede ejecutar indistintamente con wscript o cscript. La diferencia radica en la forma en que se muestran los mensajes en pantalla:

  • wscript los muestra en una ventana
  • cscript los muestra en la pantalla

A continuación se muestra un script coucou.vbs que muestra coucou en pantalla:

Image

Abramos una ventana DOS y ejecutémoslo sucesivamente con wscript y cscript:

DOS>wscript coucou.vbs

Image

DOS>cscript coucou.vbs

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

coucou

En lo anterior se observa claramente la diferencia entre los dos modos. En este documento, utilizaremos casi exclusivamente el modo de consola cscript. Este es el modo adecuado para las aplicaciones denominadas «por lotes», es decir, aquellas que no requieren interacción del usuario mediante el teclado. Cabe destacar dos puntos en los resultados anteriores:

  1. Se ha supuesto que los ejecutables wscript.exe y cscript.exe se encontraban ambos en el directorio «PATH» de la máquina, lo que permite ejecutarlos simplemente escribiendo sus nombres. Si no fuera así, habría que escribir aquí:
DOS>c:\windows\wscript coucou.vbs
DOS>c:\windows\command\cscript coucou.vbs
  1. Cabe señalar que la versión de wsh utilizada en este ejemplo y en el resto del documento es la versión 5.6.
  1. El archivo fuente del script tiene la extensión .vbs. Esta es la extensión que identifica a un script vbscript, mientras que un script javascript se identifica con la extensión .js.

El programa cscript cuenta con diversas opciones de ejecución que se obtienen al ejecutar cscript sin argumentos:

DOS>cscript

Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Tous droits réservés.

Utilisation : CScript scriptname.extension [option...] [arguments...]

Options:
//B          por lotes: Elimina la visualización de mensajes de solicitud y errores de scripts
//D          Activar la depuración
//E:engine   Usar el motor para la ejecución de scripts
//H:CScript Reemplaza el entorno de ejecución de scripts predeterminado por CScript.exe
//H:WScript tRemplace el entorno de ejecución de scripts predeterminado por WScript.exe (predeterminado)
//I          Modo interactivo (por defecto, opuesto a la  opción //B)
//Trabajo:xx   xx Ejecutar una tarea WSF
//Logo       Mostrar un logotipo (predeterminado)
//Sin log   otipo Impedir que se muestre un logotipo: no se muestra ningún banner durante la ejecución
//S          Guardar las opciones actuales de la línea de comandos para este usuario
//T:nn       Tiempo de ejecución en segu ndos: Tiempo máximo permitido para la ejecución de un script
//X          Ejecutar un script en el depurador

El argumento //nologo desactiva la visualización del banner de wsh:

C:\>cscript //nologo coucou.vbs
coucou

2.3. La estructura de un script WSH

Acabamos de ver un primer script: coucou.vbs

Image

Hemos indicado que el sufijo .vbs del archivo hace referencia a un script vbscript. Esto no es obligatorio. Podríamos haber colocado el script en un archivo con el sufijo .wsf de la siguiente forma, más compleja:

Image

Al ejecutar este script se obtiene lo siguiente:

C:\>cscript //nologo coucou2.wsf
coucou

Un script WSH puede mezclar idiomas:

Image

Al ejecutar este script se obtiene lo siguiente:

1
2
3
4
C:\>cscript //nologo coucou3.wsf
coucou (vbscript)
coucou (javascript)
coucou (perlscript)

Tomaremos en cuenta los siguientes puntos:

  1. El contenedor WSH no está vinculado a un lenguaje. Un script wsh puede mezclar lenguajes en un archivo con extensión .wsf
  2. El script está enmarcado entre las etiquetas <job id="..."> ... </job>
  3. Dentro de la aplicación (=job), los lenguajes utilizados por las diferentes partes del código están delimitados por <script language="...."> .... </script>
  4. Este lenguaje de etiquetas tiene un nombre: XML, que significa «eXtended Markup Language». XML no define ninguna etiqueta, sino reglas de disposición de las etiquetas. Por lo tanto, en este caso deberíamos decir que el lenguaje de marcado utilizado en un script wsh sigue el estándar XML.

De ahora en adelante, utilizaremos exclusivamente VBScript en archivos .vbs.

2.4. El objeto WSCRIPT

El contenedor WSH pone a disposición de los scripts que ejecuta un objeto llamado wscript. Un objeto tiene propiedades y métodos:

Un objeto Obj tiene propiedades Pi que definen su estado. Así, un objeto thermomètre puede tener una propiedad température. Esta propiedad es uno de los aspectos del estado del termómetro. Otro podría ser la temperatura máxima Tmax que puede soportar.

El objeto Obj puede tener métodos Mj que permiten a agentes externos:

  • conocer su estado
  • modificar su estado

Así, nuestro termómetro, si es electrónico, podría tener un método allumer que lo encendiera, otro éteindre que lo apagara, y otro afficher que mostrara la temperatura de equilibrio una vez alcanzada. En términos de programación, un método es una función que puede recibir argumentos y devolver resultados.

En VBScript, las propiedades Pi de un objeto Obj se denotan como Obj.Pi y los métodos Mj se denotan como Obj.Mj. El objeto wscript de WSH es un objeto importante por los métodos que pone a disposición de los scripts. Así, su método echo permite mostrar un mensaje. La sintaxis de este método es la siguiente:

wscript.echo arg1, arg2, ..., argn

Los valores de los argumentos de argi se muestran entonces en una ventana (ejecución mediante wscript) o en la pantalla (ejecución mediante cscript bajo DOS).

2.5. El contenedor Internet Explorer

Anteriormente mencionamos que Internet Explorer puede funcionar como contenedor para un script VBScript. Veamos esto con un ejemplo sencillo. A continuación se muestra una página HTML (HyperText Markup Language) llamada coucou2.htm que no contiene ningún script VBScript.

21

Image

Al cargarla directamente en Internet Explorer (Fichier/Ouvrir), se obtienen los siguientes resultados:

El contenido del archivo coucou2.htm nos muestra que HTML es un lenguaje de marcado. Conocer el lenguaje HTML es conocer estas etiquetas. Su objetivo principal es indicar al navegador cómo mostrar un documento. HTML no sigue exactamente el estándar XML, pero se acerca bastante a él.

En coucou2.htm, hay dos datos que se deben mostrar, marcados como 1 y 2. También los hemos mostrado así en la visualización que se ha generado. La etiqueta <title>...</title> fue la que hizo que la información 1 se colocara en la barra de título del navegador, y la etiqueta <body>..</body> fue la que hizo que la información 2 se colocara en el cuerpo del documento del navegador.

No profundizaremos más en el análisis del lenguaje HTML. Modifiquemos el archivo coucou2.htm introduciendo un script de VBScript y llamémoslo ahora coucou1.htm:

Image

El script VBScript se ha colocado dentro de la etiqueta <head>...</head>. Se podría haber colocado en otro lugar. Muestra «hola» al cargar la página por primera vez. En este caso, el navegador debe ser Internet Explorer, ya que solo este navegador es, por defecto, un contenedor para scripts VBScript. El resultado que se obtiene es el siguiente:

Image

seguido de la visualización normal de la página:

Image

El script ejecutado fue el siguiente:

Image

Mientras que el contenedor WSH ponía a disposición del script un objeto llamado wscript que permitía realizar visualizaciones con su método echo, aquí IE pone a disposición del script un objeto window que permite realizar visualizaciones con el método alert. Así, para mostrar «hola», se escribe wscript.echo «hola» en WSH y window.alert «hola» en IE. Aquí también se puede demostrar que, de hecho, se pueden utilizar varios idiomas en el contenedor IE. Retomamos el ejemplo ya presentado en WSH dentro de una página coucou3.htm:

Image

Al cargar esta página mediante IE, primero se muestran tres ventanas informativas:

antes de mostrar la página final:

Image

2.6. La ayuda de WSH

WSH incluye un sistema de ayuda que suele encontrarse en la carpeta «C:\Archivos de programa\Microsoft Windows Script\ScriptDocs». Para la versión 5.6 de WSH, el archivo de ayuda se llama «SCRIPT56.CHM». Solo hay que hacer doble clic en este archivo para acceder a la ayuda. Puede ser útil tener un acceso directo en el escritorio.

Una vez ejecutado, se ve algo como lo siguiente:

Image

Ahí se encuentra la ayuda del contenedor WSH, pero también la de los lenguajes VBScript y JavaScript. Es una herramienta indispensable tanto para principiantes como para programadores experimentados. Hay varias formas de trabajar con esta ayuda:

  • no sabemos muy bien qué estamos buscando. Simplemente queremos descubrir lo que se ofrece. En ese caso, se puede utilizar la pestaña Sommaire que se muestra arriba. Por ejemplo, podemos ver lo que se ofrece para VBScript:

Image

En la ayuda de VBscript encontrarás mucha información que no aparece en este documento.

  • Puedes buscar algo específico, por ejemplo, cómo usar la función msgbox de VBscript. Para ello, usa la pestaña Rechercher:

Image

La ayuda muestra todos los temas relacionados con la palabra buscada. Por lo general, los primeros temas sugeridos son los más relevantes. Este es el caso aquí, donde el primer tema sugerido es el correcto. Solo tienes que hacer doble clic en él para ver la información de ese tema:

Image