CheatSheet VBScript
3/9/2013Minitutorial 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