Comprobar disponibilidad de websites con PowerShell

16/12/2015 0 Comments

En ocasiones, para un administrador de sistemas, resulta imprescindible saber si un determinado sitio web está levantado o no. Esta necesidad aumenta aún más, si cabe, si el administrador tiene a su cargo una elevada cantidad de sitios que monitorizar. Una solución rápida puede ser, por ejemplo, lanzar un comando ping para saber si un servidor responde a una cierta dirección. Pero esto no nos da información sobre si una cierta URL está activa o funcionando correctamente.

Para este tipo de situaciones, hace falta hacer procesamiento a un nivel más alto que simplemente “comprobar que la máquina responde”. Y aquí es donde PowerShell viene a ayudar, automatizando el proceso y proporcionando acceso a funciones de alto nivel que proporcionan información adicional.

El Código

Paso a paso…

En primer lugar, nos pide las credenciales de nuestra cuenta de correo. En este caso, las de un servidor de correo ficticio llamado “unsmtp.plainconcepts.com”. Para los que tengan Office365, también funciona con estas credenciales.

credentials

A continuación, se crea un array vacío en el que se van a guardar una serie de objetos a partir del cual se generará un informe. Justo después se define un array de URLs en el que se tiene una serie de sitios web a consultar. Importar la lista de URLs desde un archivo CSV es mucho más conveniente, pero a efectos de script demo, se decidió prescindir de esa parte para que el script funcione “tal cual” sin dependencia de otros archivos.

Para cada elemento de la lista de URIs, se hace una llamada al sitio web con invoke-webRequest. Esto hace que PowerShell conecte con el sitio web, en caso de éxito, nos muestra en pantalla un mensaje “el host está online”, y guarda un objeto en el listado con el que se va a generar el informe. En caso de error se captura la excepción correspondiente y se discrimina por código de error, siendo los más interesantes son el 404 y el 500. Si se desea completar el script, se puede consultar la lista completa de códigos de estado HTTP y añadir los manejadores que se considere necesarios.

psOutput

En penúltimo lugar, una vez procesados todos los elementos de la lista de sitios, toca procesar el listado de objetos para generar un informe de estado en formato CSV. Este informe se guarda en la carpeta temporal del usuario, donde no moleste.

Finalmente, se envía por correo con send-mailMessage. Se puede enviar al propio usuario, o adjuntar una copia a otra persona.

email

informePreview

Conclusión

Como se puede ver, las partes más importantes de este script son la consulta a cada URL, que posibilita obtener información detallada del estado de cada una, y el envío del informe de estado en formato CSV por correo electrónico. Este script se puede añadir a una tarea programada que se ejecute diariamente (en caso de necesitar un informe diario), o modificarlo para que la tarea programada se pueda ejecutar con mayor frecuencia, pero modificando la parte de envío de informe por correo electrónico, para que el informe sólo se genere con los hosts que tengan problemas, y el email sólo se envíe cuando se genere el archivo CSV de informe.

¡Las posibilidades son ilimitadas!

One thought on “Comprobar disponibilidad de websites con PowerShell”

  1. Hola Amarquez,

    Estoy intentando utilizar tu código para monitorear un sitio web https://xxx.xxx.xxx.xxx:yyyy/login, pero me aparece el mensaje: …(Anulada la solicitud: No se puede crear un canal seguro SSL/TLS.). El certificado utilizado en este sitio es autogenerado y el navegador lo ve como inválido. Me podrías ayudar por favor. Mil gracias!

Responder a Ricardo Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *