PowerShell: Disco duro libre y notificaciones PUSH

11/01/2016 0 Comments

Un nuevo año, una nueva semana, y un nuevo artículo sobre PowerShell. En el artículo anterior se hablaba sobre un sistema que enviaba mensajes de email cuando un website de una lista no estaba online. Eso está bien para casos en los que se necesita un informe de estado periódico. Pero si lo que interesa es actuar sobre una emergencia… que está ocurriendo en este mismo instante, tal vez sea necesario tomar una aproximación más inmediata.

En el script de hoy, el objetivo es saber si una máquina de la granja de servidores de la empresa se está quedando sin espacio libre en disco. Para ello se hará uso de una consulta WMI, el programador de tareas de Windows y un servicio PUSH de notificaciones a teléfonos móviles.

El código

Paso a Paso

Acceso a información de discos locales

Desde powershell, esto se puede ver fácilmente con el siguiente comando: “gwmi win32_volume -Filter ‘drivetype = 3’”, que devuelve una lista detallada de parámetros para cada uno de los discos del sistema. Esto constituye la primera pieza del puzzle que toca resolver.

get-drives

El DriveType indica el tipo de disco que se desea consultar. En este caso, el DriveType = 3 hace un filtrado para mostrar únicamente los discos duros locales. Para cada uno de los discos que devuelve, se quiere procesar los que tengan una capacidad superior a 0 para descartar cualquier unidad de CD/DVD que pudiera haber pasado el filtro.

Entran en escena los servicios PUSH

Hay multitud de proveedores de servicios PUSH, como PushOver, Slack, PushBullet, NotifyMyAndroid… Cada uno tiene sus ventajas e inconvenientes: Los hay con diferentes modelos de licenciamiento, desde licencia por plataforma en la que se instale, hasta la compra de paquetes de mensajes cuando se llega al límite máximo de mensajes mensuales.

De todos los nombrados anteriormente, hay uno que tiene cliente móvil para las tres grandes plataformas (Android, IOS y Windows Phone) y que además tiene la segunda pieza necesaria: una API REST con la que poder enviar notificaciones: Slack

De la API, que incluye funciones para infinidad de tareas, la parte interesante es la que envía un mensaje al chat. Por limpieza y reusabilidad del código, esta parte se ha separado en una función aparte llamada “Send-SlackMessage” que acepta como parámetros el canal al que se desea enviar el mensaje, el nombre de usuario que aparece como “agente publicador”, y el mensaje en sí. Esta función se puede sacar del código y utilizar como notificador en cualquier otro script PowerShell, como procesos que tardan horas en completar, o cualquier otra situación en la que se considere que sea necesario recibir notificaciones.

La parte más importante, y de la que depende que todo esto pueda funcionar, es el token de cliente. En este caso, desde la web de Slack se puede solicitar un token de usuario desde el que enviar notificaciones de una forma muy sencilla y automatizada, sin necesidad de tener que implementar ningún tipo de esquema de autenticación.

¿Por algún motivo el token queda expuesto y empiezan a llegar mensajes de spam? Simplemente se genera un nuevo token, y listo.

get-token

Programando tareas

Nada de esto tendría sentido si no hay una forma de hacer una comprobación periódica del estado del disco. Esto se puede lograr muy fácilmente con el Task Scheduler de Windows. En primer lugar se programa el trigger para que se ejecute diariamente cada 10 minutos.

new-task

Y en segundo lugar se especifica la acción a realizar. En este caso, lanzar una PowerShell –file “nombreFichero.ps1”, que es donde está guardado el script que acompaña a este artículo.

new-task2

Comprobación y Conclusiones

Finalmente, toca comprobar que todo ha funcionado correctamente, y que la notificación se ha recibido en los diferentes medios (Android, Windows Phone, PC,…)

message

Screenshot_Android   Screenshot_WP

Como se puede ver, aunque Slack proporciona clientes para todas las plataformas la interfaz de usuario y la organización de los mensajes cambia dependiendo de la plataforma.

En conclusión, mediante el uso de sistemas de mensajería Push, se pueden enviar notificaciones a canales específicos lo que permite avisar a un equipo completo de trabajo de que algo está pasando con los servidores, al tiempo que la bandeja de entrada de correo electrónico se puede mantener algo más limpia de mensajes. Esto puede permitir una interacción más ágil entre los miembros de un equipo para coordinarse en la resolución del problema.

Deja un comentario

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