Crear Una Alerta Y Enviar Un Correo Cuando Se Produce
Posted by urpiano en viernes 8 \08\+01:00 junio \08\+01:00 2007
El establecer una alerta es algo muy útil en determinadas ocasiones. Por ejemplo, queremos saber cuándo nos estamos quedando bajos de espacio en disco. En la herramienta administrativa Rendimiento, podemos crear alertas cuando determinado contador del equipo alcance determinado umbral; una vez alcanzado podemos recibir un mensaje de consola y/o ejecutar un programa. Por desgracia, no permite enviar un correo advirtiendo de la alerta, lo cual sería muy útil. Para poder enviar ese correo es necesario un programa para lanzar un script VBScript que envíe el correo. Veremos cómo crear la alerta y también el script en sí.
Para crear la alerta necesitamos abrir la herramienta Rendimiento, en el panel del árbol expandir el nodo Registros y alertas de rendimiento, hacer click derecho sobre el nodo Alertas y ejecutar Nueva configuración de alerta…
Se abre el cuadro de diálogo Nueva Alerta donde escribimos el nombre de la alerta, en el ejemplo Disco C 2 GB
Ahora se abre el cuadro de diálogo de la alerta Disco C 2 GB, donde podemos poner un comentario, en el ejemplo Esta alerta envía un correo cuando el disco C tiene menos de 2 GB libres. Una vez escrito el comentario, vamos a agregar el contador que nos permitirá detectar el espacio que queda libre en C. Para ello pulsamos el botón Agregar…
Se abre el cuádro de diálogo Agregar contadores, donde podemos añadir tantos contadores como necesitemos. En nuestro caso sólo añadiremos uno. En el desplegable Objeto de rendimiento seleccionamos DiscoLógico, con la opción Seleccionar contadores de la lista marcada, en la lista de debajo seleccionamos el contador Megabytes libres, con la opción Seleccionar instancias de la lista marcada, en la lista de debajo seleccionamos C:, pulsamos el botón Agregar y a continuación el botón Cerrar
Una vez seleccionado el contador, establecemos el umbral por el cual se lanzará la alerta. Para ello, en el desplegable Alertar cuando el valor sea, seleccionamos Inferior a y en la caja de texto Límite escribimos 2048. Ahora vamos a establecer cada cuánto tomará datos la alerta; para ello en Tomar datos de muestra cada, caja de texto Intervalo, escribimos 1 y en el desplegable Unidades seleccionamos Horas, de esa manera se lanzará cada hora. A continuación pasamos a la pestaña Acción
Es en esta pestaña en la que estableceremos que se envíe el correo. Para ello, activamos la casilla de verificación Ejecutar este programa y establecemos wscript como programa a lanzar, bien escribiendo la ruta completa o navegando con el botón Examinar hasta %WinDir%\system32. No se puede ejecutar diréctamente el script, es necesario pasarlo como parámetro del ejecutable (wscript.exe); por ello debemos pulsar el botón Argumentos de la línea de comandos
Se abre el cuádro de diálogo Argumentos de la línea de comandos. Desmarcamos todas las casillas de verificación que están marcadas y marcamos la casilla Mensaje de texto, lo que habilita la caja de texto en la que debemos poner la ruta y el nombre del script. Aquí es donde biene el truqi: como se encierra de modo automático el nombre del script y como el script recibe como parámetros el destinatario, remitente, asunto y cuerpo, dado que el asunto y el cuerpo van a contener espacios ¿cómo podemos encerrar entre comillas los parámetros? La respuesta es poner unas comillas después del nombre del script, para que así cierren las iniciales que se ponen de forma predeterminada y podamos abrir y cerrar la que necesitemos, eso sí, el último parámetro debe de abrir siempre comillas y no debe cerrarlas. En el ejemplo la línea que se pone es C:\Documents and Settings\Administrador\Mis documentos\mail.vbs" /F:"Administrador de Red<administrador@dominio.com>" /T:"El Más Guapo Del Universo<freyes@dominio.com>" /S:"Alerta en SERVIDOR" /B:"Alerta de espacio en C:\n\nMenos de 2 GB libres en el disco C de SERVIDOR. Una vez escrito el texto, pulsamos el botón Aceptar
Esto nos lleva de nuevo al cuadro de diálogo de la alerta, donde observamos en Ejemplo de argumentos de la línea de comandos que aparecen los argumentos que hemos puesto. Pulsamos el botón Aceptar
Se abre el cuadro de diálogo Establecer contraseña, donde debemos suministrar las credenciales del usuario que lanzará la alerta, por ejemplo el administrador, y pulsamos el botón Aceptar
Ya está creada la tarea y podemos verla en el panel de detalle de la consola de administración de rendimiento
El Script mail.vbs
Script VBScript que permite enviar un correo usando un servidor de correo externo al equipo
Sintaxis
{wscript | cscript [//nologo]} mail.vbs [/?] /D:remitente /P:destinatario /A:asunto /C:cuerpo
Siendo
Parámetro | ¿Requerido? | Descripción |
/? | No |
Muestra la ayuda en línea.
|
/D | Sí |
Remitente del mensaje. Se debe pasar con el formato
"Nombre para mostrar<email>", por ejemplo "Saurón<sauron@mordor.gob>" |
/P | Sí |
Destinatario del mensaje. Se debe pasar con el formato
"Nombre para mostrar<email>", por ejemplo "Gandalf<gandalf@magos.org>" |
/A | Sí |
Asunto del mensaje
|
/C | Sí |
Cuerpo del mensaje. Permite establecer saltos de línea
el texto, escribiéndolos como \n |
Ejemplo
cscript //nologo /d:"Peregrim Tuk<peregrimt@losgamos.org>" /p:"Meriadoc Brandigamo<meriadocb@losgamos.org>" /a:"¿Quedamos …" /c:"…para comer y beber cerveza?\n\nSalu2"
Este es el código del script
'mail.vbs
'
'Script VBScript que permite enviar un correo usando
'un servidor de correo externo al equipo
'
'Sintaxis
'
'{wscript | cscript [//nologo]} mail.vbs [/?] /D:remitente
' /P:destinatario /A:asunto /C:cuerpo
'
'Siendo
'
' - ?: parámetro opcional; si se incluye muestra la ayuda
' en línea y termina el script
'
' - D: parámetro requerido; remitente del mensaje. Se debe
' pasar con el formato "Nombre para mostrar<email>",
' por ejemplo "Saurón<sauron@mordor.gob>"
'
' - P: parámetro requerido; destinatario del mensaje. Se debe
' pasar con el formato "Nombre para mostrar<email>",
' por ejemplo "Gandalf<gandalf@magos.org>"
'
' - A: parámetro requerido; asunto del mensaje
'
' - C: parámetro requerido; cuerpo del mensaje. Permite
' establecer saltos de línea el texto, escribiéndolos
' como \n
'
'Ejemplo
'
'cscript //nologo mail.vbs /d:"Peregrim Tuk<peregrimt@losgamos.org>"
' /p:"Meriadoc Brandigamo<meriadocb@losgamos.org>"
'/a:"¿Quedamos ..." /c:"...para comer y beber cerveza?\n\nSalu2"
'
'© Fernando Reyes - Junio 2007
Option Explicit
Dim obj_Email, str_De, str_Para
Dim str_Asunto, str_Cuerpo
Dim str_Usuario, str_Clave
Dim str_Error
'Iniciamos la variable de mensaje de error
'como cadena vacía
str_Error = ""
'Si se ha pedido la ayuda
If WScript.Arguments.Named.Exists("?") Then
'Se muestra y...
Call s_Ayuda(str_Error)
'se finaliza el script
WScript.Quit 0
End If
'Si no se ha recibido remitente se recoge en la
'variable de mensaje de error
If Not WScript.Arguments.Named.Exists("D") Then
str_Error = str_Error & _
"No se ha especificado el " & _
"remitente" & vbCrLf
Else
'Recogemos el remitente
str_De = WScript.Arguments.Named("D")
End If
'Si no se ha recibido destinatario se recoge en la
'variable de mensaje de error
If Not WScript.Arguments.Named.Exists("P") Then
str_Error = str_Error & _
"No se ha especificado el " & _
"destinatario" & vbCrLf
Else
'Recogemos el destinatario
str_Para = WScript.Arguments.Named("P")
End If
'Si no se ha recibido el asunto se recoge en la
'variable de mensaje de error
If Not WScript.Arguments.Named.Exists("A") Then
str_Error = str_Error & _
"No se ha especificado el " & _
"asunto del mensaje" & vbCrLf
Else
'Recogemos el asunto
str_Asunto = WScript.Arguments.Named("A")
End If
'Si no se ha recibido el cuerpo se recoge en la
'variable de mensaje de error
If Not WScript.Arguments.Named.Exists("C") Then
str_Error = str_Error & _
"No se ha especificado el " & _
"cuerpo del mensaje" & vbCrLf
Else
'Recogemos el cuerpo, sustituyendo los \n
'por saltos de linea, poniendo al principio
'el remitente, el destinatario, la fecha y
'la hora
str_Cuerpo = "De: " & str_De & vbCrLf & _
"Para: " & str_Para & vbCrLf & _
"Fecha: " & Date & vbCrLf & _
"Hora: " & Time & vbCrLf & vbCrLf & _
Replace(WScript.Arguments.Named("C"), _
"\n",vbCrLf)
End If
If Len(str_Error) > 0 Then
Call s_Ayuda("Error 1: no se han pasado los a" & _
"rgumentos requeridos:" & _
vbCrLf & vbCrLf & str_Error)
WScript.Quit 1
End If
'Creamos el objeto Mensaje de correo
Set obj_Email = CreateObject("CDO.Message")
'Establecemos el remitente
obj_Email.From = str_De
'Establecemos el destinatario
obj_Email.To = str_Para
'Establecemos el asunto
obj_Email.Subject = str_Asunto
'Establecemos el cuerpo del mensaje
obj_Email.Textbody = str_Cuerpo
'Configuramos ahora los parámetros de envío
'Especificamos que el servidor SMTP no está en el
'propio equipo desde el que se envía el correo
'Un valor de 1 significa que usaremos el servidor
'SMTP del propio equipo y un valor de dos
'que utilizaremos uno externo; por ello ponemos de
'valor 2
obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configu" & _
"ration/sendusing") = 2
'Especificamos la URL o la IP del servidor SMTP
'Que cada uno ponga aquí el que corresponda
obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configu" & _
"ration/smtpserver") = _
"smtp.dominio.com"
'Especificamos el puerto por el que está el servidor
'SMTP (por defecto el 25)
obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configu" & _
"ration/smtpserverport") = 25
'Especificamos el tipo de autenticación: 0 sin
'autenticación, 1 con autenticación básica (texto
'plano) y 2 con autenticación NTLM. Usaremos
'autenticación básica. Si el servidor requiere
'otra, deberás cambiar a lo que necesites
obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configu" & _
"ration/smtpauthenticate") = 1
'Especificamos si se usará SSL para el envío,
'en el ejemplo no se usará. Si es necesario usar
'SSL, cambiar a True
obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configu" & _
"ration/smtpusessl") = False
'Especificamos el nombre del usuario para autenticar
'en el servidor SMTP
obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configu" & _
"ration/sendusername") = "usuario"
'Especificamos la contraseña
obj_Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configu" & _
"ration/sendpassword") = "contraseña"
'Actualizamos la configuración de envío del objeto
'CDO.Message
obj_Email.Configuration.Fields.Update
'Enviamos el correo
obj_Email.Send
'Limpiadita de culete :-)
Set obj_Mensaje = Nothing
Sub s_Ayuda(str_Error)
If Len(str_Error) > 0 Then
WScript.Echo str_Error & vbCrLf & vbCrLf
End If
WScript.Echo "mail.vbs"
WScript.Echo ""
WScript.Echo "Script VBScript que p" & _
"ermite enviar un corr" & _
"eo usando"
WScript.Echo "un servidor de correo" & _
" externo al equipo"
WScript.Echo ""
WScript.Echo "Sintaxis"
WScript.Echo ""
WScript.Echo "{wscript | cscript [/" & _
"/nologo]} mail.vbs [/" & _
"?] /D:remitente"
WScript.Echo " /P:destinatario " & _
"/A:asunto /C:cuerpo"
WScript.Echo ""
WScript.Echo "Siendo"
WScript.Echo ""
WScript.Echo " - ?: parámetro opci" & _
"onal; si se incluye m" & _
"uestra la ayuda"
WScript.Echo " en línea y ter" & _
"mina el script"
WScript.Echo ""
WScript.Echo " - D: parámetro requ" & _
"erido; remitente del " & _
"mensaje. Se debe"
WScript.Echo " pasar con el f" & _
"ormato ""Nombre para " & _
"mostrar<email>"","
WScript.Echo " por ejemplo """ & _
"Saurón<sauron@mordor." & _
"gob>"""
WScript.Echo ""
WScript.Echo " - P: parámetro requ" & _
"erido; destinatario d" & _
"el mensaje. Se debe"
WScript.Echo " pasar con el f" & _
"ormato ""Nombre para " & _
"mostrar<email>"","
WScript.Echo " por ejemplo """ & _
"Gandalf<gandalf@magos" & _
".org>"""
WScript.Echo ""
WScript.Echo " - A: parámetro requ" & _
"erido; asunto del men" & _
"saje"
WScript.Echo ""
WScript.Echo " - C: parámetro requ" & _
"erido; cuerpo del men" & _
"saje. Permite"
WScript.Echo " establecer sal" & _
"tos de línea el texto" & _
", escribiéndolos"
WScript.Echo " como \n"
WScript.Echo ""
WScript.Echo "Ejemplo"
WScript.Echo ""
WScript.Echo "cscript //nologo mail.vbs " & _
"/d:""" & _
"Peregrim Tuk<peregrim" & _
"t@losgamos.org>"""
WScript.Echo " /p:""Meriad" & _
"oc Brandigamo<meriado" & _
"cb@losgamos.org>"""
WScript.Echo "/a:""¿Quedamos ..."" " & _
"/c:""...para comer y " & _
"beber cerveza?\n\nSal" & _
"u2"""
WScript.Echo ""
End Sub 's_Ayuda
Gura said
Gracias, en este momento exactamente me será de mucha ayuda ;)
urpiano said
Me alegra que pueda hacer algo más que hacerte reir de vez en cuando :-)
Rober said
Muy interesante… gracias :)
Juan Carlos said
Muchas gracias! googleando me salio tu web! increible me la estoy leyendo de pe a pa! gracias por estos códigos tan wenos y útiles!
:D
Juan Arias said
Gracias !!!!!!!!!!!!!
Te pregunto y disculpa mi ignorancia, como reemplazo mis servidores?
‘Especificamos la URL o la IP del servidor SMTP
‘Que cada uno ponga aquí el que corresponda
obj_Email.Configuration.Fields.Item _
(«http://schemas.microsoft.com/cdo/configu» & _ «ration/smtpserver») = _
«smtpmed.une.net.co»
Gracias por tu ayuda
urpiano said
Juan Arias,
donde pone
smtpmed.une.net.co
pones la URL de tu servidor SMTP
Sesso said
Great site.
Joel said
Excelente post. Fue muy útil el codigo.
nahuel said
Muchas gracias, la verdad el vbs y la explicacion me vinieron como anillo al dedo.
Luis Gutierrez said
Hola Que tal.
EStoy buscando exactamente lo mismo pero para Windows 2008 Server, alguien sabe como crear las alertas? puedo usar el mismo codigo para el envio de correos?
Gracias
francisco franco said
Lo necesito para windows server 2008 en 2003 anda sin problemas pero no encuentro como en 2008
Jose said
Esto es para crear un .bat??
Yo lo que busco es un ejecutable para que cada vez que se reinice el servidor, se me notifique con mail.
Un saludo.
Cristian C. said
muchas gracias me sirvio mucho. Utilizo una plataforma de integración de datos Powercenter y logré generando este .vbs para su ejecucion directa en esta enviandole los parametros. además le sume un adjunto incluyendo otra variable y funciono.
saludos