CheatSheet VBScript

3/9/2013
  • Cheat sheets
  • Vbscript

Minitutorial para poder realizar archivos de comandos en Visual Basic Script (.vbs). Personalmente me parece mucho más potentes que los .bat

Suponemos que conocemos la sintaxis básica de vbs.

Creación

Vete a windows y crea un nuevo fichero vacio con las extensión .vbs. ¡Ya esta!

Ejemplos de código

Mensajes de aviso

El básico “Hola Mundo”

WScript.Echo "Hola Mundo!!"

Y el mismo con concatenación de cadenas:

WScript.Echo "Hola mundo!!" & " Firmado. Smurf Dad"

Esto mismo se puede hacer con la funcion MsgBox

MsgBox("Hola Mundo!!!)

Solicitar datos al usuario:

Input = InputBox("Introduzca algo", "<aquí debe escribir algo>")

Manejo de ficheros

Escritura de ficheros de texto
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim outputFile
    outputFile = "./output.txt"
    Set txtStreamOut = fso.OpenTextFile(OutputFile, 2, True)
    WScript.Echo "Escribiendo fichero de salida."
    For i = 1 To 10
        txtStreamOut.writeline "Loop number: " & i
        txtStreamOut.writeline text
    Next

Envío de correo electrónico

Desde VBScript tenemos la posibilidad de enviar correos electronicos a traves de servidores que pueden ser externos o internos a la maquina en la que estamos ejecutando el script.

A continuación vamos a describir el código necesario para ese envio.

Creamos el objeto de mensaje de correo electrónico.

Set obj_Email = CreateObject("CDO.Message")

Incluimos los datos del mensaje. El remitente, el destinatario, el asunto, el propio mensaje, etc, etc.

Hay que apuntar que las direcciones de correo deben ir en formato Nombre a visualizar <direccion_de_email@direccion.com>

obj_Email.From = "<dirección del remitente>"
obj_Email.To = "dirección del destinatario"
obj_Email.Subject = "<asunto>"
obj_Email.Textbody = "<cuerpo del mensaje en formato texto>"
obj_Email.HTMLbody = "<cuerpo del mensaje en formato html>"

El cuerpo en formato texto y en formato HTML son complementarios y se puede informar solo uno de los dos campos o los dos

A continuación configuramos el servidor de envío de correo

Especificamos que el servidor SMTP no está en el propio equipo desde el que se envía el correo

Valor "1"
Significa que usaremos el servidor SMTP del propio equipo
Valor "2"
Significa que utilizaremos uno externo


obj_Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = <valor seleccionado>


Especificamos la URL o la IP del servidor SMTP

obj_Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.servidor.com"


Especificamos el puerto por el que está escuchando el servidor (En SMTP por defecto suele ser el 25)

obj_Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25


Especificamos el tipo de autenticación que requiere el servidor:

0
Sin autenticación
1
Con autenticación básica (texto plano)
2
Con autenticación NTLM.


obj_Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1


Especificamos si se usará SSL para el envío

obj_Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False


Especificamos el nombre del usuario y la contraseña para autenticarnos en el servidor en el servidor SMTP

obj_Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "<nombre de usuario>"
obj_Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "<contraseña de usuario>"


Antes de enviar sólo nos resta actualizar la configuración del objeto mensaje CDO.Message

obj_Email.Configuration.Fields.Update


Y por último y para finalizar enviamos el mensaje y limpiamos el objeto.

obj_Email.Send
Set obj_Email = Nothing


Objeto Dictionary

Creación del Objeto


Set objeto = CreateObject("Scripting.Dictionary")


Para que el objeto no sea sensible a mayúsculas con las claves inmediatamente después de crearlo debemos poner

objeto.CompareMode = 1


Incluir valores
objecto.add "clave", valor
objeto.item("clave") = valor


Accediendo a la información
wscript.echo objecto.item("clave")


Comprobando la existencia
if objecto.exists("clave") then
    'Existe
else
    'No existe
end if


Calcular el número de entradas en el diccionario.
claves = objecto.Keys
entradas = objecto.Items
for i=0 to objecto.Count - 1
    'Ejemplo 1
    wscript.echo claves(i) & "=" & entradas(i)
    'Ejemplo 2
    wscript.echo claves(i) & "=" & objecto.item(claves(i))
next


Borrado de Entradas

Borrar una entrada en concreto

objeto.Remove("clave")


Borrar todas las entradas

objecto.RemoveAll


Ejecución de procesos

Ejemplo de código para detectar que se esta ejecutando un proceso determinado en una maquina.

Const NOMBRE_PROCESO = "notepad.exe"
Const MAQUINA = "." ' "." indica que en la maquina local
Set oWmi = GetObject("winmgmts:" & {impersonationLevel=impersionate}!\\ & MAQUINA & "\root\cimv2")
Set listaProcesos = oWmi.ExecQuey("Select * from Win32_Process where Name = '" & NOMBRE_PROCESO & "'")
if listaProcesos.Count = 0 then
    'El proceso no existe en ejecucion
else
    'El proceso existe en ejecucion
end if


Ejecutar una aplicación
Set oShell = CreateObject("WScript.Shell")
oShell.Run "c:\WINDOWS\notepad.exe", 1, False