Problema con el programador de tareas
brucine Mensajes publicados 24845 Fecha de registro Estado Miembro Última intervención -
Hola,
Estoy pidiendo ayuda porque tengo un problema en el programador de tareas de Windows 10, quiero que cuando una tarea programada se pierda, se ejecute lo antes posible en el próximo inicio del ordenador.
Aún activando todas las opciones correctas, la tarea no se ejecuta al inicio del ordenador si la fecha ha sido pasada, y no entiendo por qué, espero que alguien pueda explicarme y resolver este fenómeno.
La tarea en cuestión es una tarea programada para cada 3 meses y ejecuta un script.
Aquí están los parámetros de mi tarea que he configurado:
6 respuestas
-
Hola,
¿Está bien indicado el "Working Path" (Inicio en (Opcional)) de tu script a ejecutar?
(No solo el camino)
(En Acciones) -
No, no he indicado nada en "Comenzar en (opcional)", ¿qué debo escribir ahí? ¿"Ruta de trabajo"?
-
Escribir la ruta de la carpeta en la que se encuentra el script.
-
-
Hola,
Como no sabemos cuál es tu pedido, no hemos llegado.
Si es un script Batch, debemos especificar el intérprete de comandos: en Programas/Scripts colocamos cmd y en Argumentos /C (Ruta) donde la ruta está perfectamente calificada y entre comillas, nada en Iniciar en.
Debe ejecutarse una primera vez de forma manual (para introducir el usuario y la contraseña) y debemos verificar que el firewall no lo impida.
El ítem si una tarea programada se pierde no significa que la tarea se ejecute en el próximo inicio, sino que se reiniciará inmediatamente y luego el número de veces especificado si falla.
Si queremos que también se ejecute al inicio, debemos crear un nuevo desencadenador para tal efecto.
Por supuesto, antes de la programación, debemos asegurarnos de que no sea el propio script el que falla (falta de permisos, errores de sintaxis...)
-
-
Sí, todo eso se ha realizado, pero no puedo agregar el desencadenador "iniciar al arrancar" porque de lo contrario el script se ejecutará en cada reinicio todos los días y eso no es lo que busco.
En mi script hago un bloqueo de sesión y he notado que tampoco lo toma en cuenta en las tareas.
Pero el script aún no se inicia al arrancar, y cuando lo inicio yo mismo desde el programador de tareas no quiere bloquear la sesión.
-
Si tengo que repetirme, no existe ninguna condición que permita lanzar una tarea al inicio en función de un parámetro particular: se lanza globalmente al inicio o no.
En cuanto al cumplimiento de la tarea en sí misma (no tendrá más éxito al inicio que en una sesión a menos que este inicio afecte a todos los usuarios en lugar de a uno solo), la "sutileza" puede ser que se busca bloquear una sesión a partir de "credenciales" (nombre/tipo de usuario e identificador) que no corresponden a esta sesión, lo que lógicamente provoca que nos echen.
Tal vez se pueda eludir este problema de manera más precisa gestionando la tarea no por vía gráfica sino a través de SCHTASKS especificando los identificadores a utilizar:
https://ss64.com/nt/schtasks.html
Pero estamos hablando un poco en el vacío, lo mejor sería que subieras la tarea en cuestión para ver qué es lo que falla.
-
-
He estado viendo que la tarea no acepta el comando "shutdown /l /f" para bloquear la sesión en mi script, pero el reinicio funciona.
Mientras que sin usar el programador de tareas, mi script funciona perfectamente.
Para los usuarios que no tienen contraseña, la tarea funciona al iniciar si se ha perdido la tarea, pero para los usuarios con contraseña, la tarea no funciona al iniciar si se ha perdido y no lo entiendo.
Aquí está mi script :
*****************************************************
SET IMAGE_PATH=C:\ProgramData\Image\background.png
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v Wallpaper /t REG_SZ /d %IMAGE_PATH% /f
rundll32.exe user32.dll,UpdatePerUserSystemParameters
TIMEOUT 5
shutdown /r /f*****************************************************
El objetivo es que cambie el fondo de pantalla cada 3 meses y luego reinicie, inicialmente quería que desconectara la sesión pero eso no funciona.
Demasiado complicado crear la tarea a través de SCHTASKS, hay demasiados parámetros, no lo lograré.
-
Hola,
El programador de tareas no acepta un script de cierre que contenga el conmutador /l de SHUTDOWN.En el mejor de los casos, si lo escribimos, la tarea no se ejecutará a menos que la ejecutemos manualmente en el programador de tareas (está activa) y salgamos de la sesión de Windows por el medio habitual, pero pierde su interés.
La solución es complicada, hay que crear una tarea:
-Ejecutar incluso si el usuario no está conectado, permisos máximos
-Dejar el resto por defecto excepto salida de suspensión
-El disparador es: En un evento, por defecto, el Registro de Seguridad, el ID del evento 4647, las 2 casillas Activar marcadas
-La acción inicia el programa CMD con el argumento /C "C:\Users\brucine\Desktop\logoff.cmd" donde lo que está entre comillas es la ruta de mi script.
Se podría objeter que eso es muy bonito, pero dado que el programador por evento no contiene por definición una fecha, no estamos muy avanzados, por lo que vamos a intervenir en el script, partiendo del principio de que si usamos una nueva imagen, es porque hemos reemplazado la antigua en la fuente y se ha creado una nueva al respecto con una fecha de modificación igual a la del día.
Si no es así, podemos añadir otra capa con un script de PowerShell que modifique el atributo LastWriteTime, pero no vamos a complicar las cosas, con una utilidad, es más rápido, por ejemplo:
https://www.online-tech-tips.com/computer-tips/how-to-change-the-last-modified-date-creation-date-and-last-accessed-date-for-files-and-folders/Solo me queda escribir mi script que compara la fecha del archivo con la de hoy menos 90 días, he probado con un "archivo imagen" windows_update.cmd del que, por supuesto, hay que modificar el nombre y la ruta en consecuencia.
@ECHO OFF REM Ir al directorio que contiene el archivo CD /D C:\Users\brucine\Desktop FOR /F %%a IN ('dir windows_update.cmd^|find /i "windows_update.cmd"') DO SET FileDate=%%a FOR /F "usebackq" %%j IN (`PowerShell $date ^= Get-Date^; $date ^= $date.AddDays^(-90^)^; $date.ToString^('dd/MM/yy'^)`) DO SET OldDate=%%j IF %OldDate% LEQ %FileDate% (GOTO MISCRIPT) ELSE (GOTO NADA) :MISCRIPT echo escribir lo que quiero GOTO :FIN :NADA echo circulen, no hay nada que ver :FIN
-


