El programador de tareas de Windows lleva estando presente en el sistema desde hace varios lustros y, desde su aparición, Microsoft apenas lo ha tocado. Y si no lo hubiera tocado, para ser francos, hubiera hecho mejor ya que las veces que lo toca, normalmente lo estropea. Por ejemplo, en Windows Server 2012 le quitaron (o al menos marcaron como obsoleto) la posibilidad de enviar emails, algo que sí era posible en versiones anteriores (aunque era muy limitado, ya que no te permitía autenticarte en el servidor de correo). Y en Windows Server 2016 no le quitaron nada, pero hicieron que algunas cosas funcionen fatal, como todos los problemas que da ejecutar archivos de script (.wsf) o .bat, el problema de la barra inclinada al final de las rutas, o lo que veremos a continuación entre otras cosas...

En mi opinión me parece increíble que un sistema tan potente y con tantas posibilidades como Windows Server (especialmente en su última versión, la 2016) tenga un programador de tareas tan "así". Y más habida cuenta lo útil que es y las posibilidades que te da este tipo de software para llevar a cabo todo tipo de acciones, ante eventos o periódicamente, para mantenimientos y muchas otras cosas. Nada que ver con cron en Linux, que si bien es mucho más espartano, funciona de maravilla y te permite hacer configuración de tareas desde la línea de comandos. Lo peor del caso es que Microsoft sabe de estos problemas hace mucho tiempo y no los prioriza para solucionarlos.

Lo cierto es que, en Windows 2016, mi recomendación sería utilizar algún sistema de programación de tareas alternativo. Lo malo es que los que hay en el mercado suelen ser muy potentes pero muy caros (o muy antiguos, casi pensados para Windows XP 😣) y además añades más carga al servidor. Así que lo más normal, al menos en mi caso, es seguir usando lo que nos da el sistema de serie, y lidiar con sus "particularidades".

El problema con las tareas repetitivas de "ejecutar solo una vez"

Una de las "particularidades" (existen más) del programador de tareas de Windows Server 2016 es que, en muchas ocasiones, cuando creas una tarea periódica que se repite en el futuro, no te va a funcionar. Y tampoco te da error, y si te atienes a la información que te muestra todo está correcto, pero no funciona.

Por ejemplo, fíjate en la programación de esta tarea:

La he creado esta mañana (a las 13:00), sin habilitarla, y la he marcado para que se repita cada hora a partir de esa fecha. Aparentemente todo está OK y lo que debería ocurrir es que, en cuanto la habilite, cada hora se ejecutará para llevar a cabo la tarea. De hecho, si ves la tarea en el listado de las mismas, lo pondrá muy claro:

Ahí dice que la hora de próxima ejecución es hoy a las 19:00:00 (en el momento de escribir esto son las 18:02), y si dejamos que pase el tiempo lo irá cambiando también, de la manera esperada. El problema es que, a pesar de lo que diga, no funcionará.

El problema viene de que si utilizas como fecha y hora de inicio un valor anterior al momento de habilitar la tarea, el servicio interpreta que se debe empezar a repetir a partir de ese momento, literalmente, y como ese tiempo ya ha pasado, el resultado es que no la ejecuta jamás. Eso a pesar de que indica cuál será supuestamente la fecha de la siguiente ejecución, como vemos en la figura anterior. Es totalmente de chiste, pero uno de los de no reírse mucho 🤯

Lo peor del asunto es que si deshabilitas la tarea por el motivo que sea y luego la vuelves a habilitar, de repente te deja de funcionar. Y lo más probable es que ni siquiera te des cuenta.

Existen dos soluciones:

La primera es la obvia: tener en cuenta este problema y cada vez que toquemos la tarea o la habilitemos tras haberla deshabilitado previamente, editar el disparador de la misma y asegurarse de que le ponemos una fecha y hora de inicio en el futuro, aunque sea solo un minuto o dos después de la hora actual. Pero es muy fácil olvidarse y desde luego no es muy operativo que digamos.

La otra es un poco menos intuitiva, pero también funciona. Consiste en cambiar la programación para que sea una tarea de ejecución diaria con repetición. Por ejemplo, en nuestro caso podríamos hacer esto:

Lo que hacemos es poner que se debe ejecutar todos los días a una determinada hora (la que sea da más o menos igual, aunque si la rehabilitamos y queremos que empiece ya, deberíamos poner una próxima a cuando lo hagamos), y le indicamos además que debe repetirse cada "x" tiempo (en nuestro ejemplo, cada hora) durante un día entero.

Lo que tenemos con esto es una tarea que cada día se "rehabilita" automáticamente, al llegar la hora indicada. En el peor de los casos no empezará a ejecutarse hasta el día siguiente a la hora especificada, y luego se irá repitiendo durante todo el día con la periodicidad que le indiquemos.

Una verdadera chapuza, pero funciona.

¡Espero que te resulte útil!

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA