Estoy tratando de ejecutar un archivo por lotes en Windows 7 desde el Programador de tareas. Puedo ejecutar bien el archivo por lotes si lo ejecuto desde el símbolo del sistema.
Si lo ejecuto desde el Programador de tareas para que solo se ejecute cuando el usuario haya iniciado sesión, la tarea se ejecutará sin ningún problema. Sin embargo, cuando se ejecuta cuando el usuario no ha iniciado sesión, el Programador de tareas parece que está ejecutando el archivo, pero no sucede nada.
Intenté cambiar el archivo por lotes a nada más que a la siguiente línea para asegurar que no se deba a lo que hay en el archivo por lotes:
echo "success" >> c:\temp\test.log
Y eso no funciona. ¿Algunas ideas? Lo ejecuto con los más altos privilegios y con una cuenta de administrador que tiene permisos completos para el archivo por lotes y la carpeta donde se está escribiendo el archivo.
fuente

Respuestas:
PROGRAMA DE TAREAS: EL PROGRAMA DE LOTES PROGRAMADO NO CORRE
Propiedades del programador de tareas. . .
Desde Windows
Task Scheduleren el trabajoProperties(ver abajo la mayoría de las capturas de pantalla) en. . .1.
Generalpestaña, asegúrese de que las siguientes opciones estén seleccionadas / marcadas o desmarcadas tal como se muestra en la pantalla de impresión ARun only when user is logged onRun whether user is logged on or notRun with the highest privileges2.
Conditionspestaña, asegúrese de que las siguientes opciones estén seleccionadas , marcadas o desmarcadas tal como se muestra en la Pantalla de impresión BWake the computer to run this task3.
Actionstabule, haga clicEdity asegúrese de queStart in (optional)esté configurado tal como se muestra en el siguiente ejemplo ( NO ponga comillas dobles a su alrededor) para la ruta completa que señala dónde se encuentra el script por lotes SIN una barra invertida final "\" Imprimir pantalla CCONSIDERACIONES DE SEGURIDAD
Una vez que presione
OK( 2. arriba), debería solicitarle la credencial para ejecutar esto, y esa credencial es lo que necesitará acceso alEXECUTEarchivo por lotes donde exista, y también necesitará acceso para hacer lo que sea que esté ejecutando el archivo por lotes que escribiste.Puede ser mejor configurar una cuenta de usuario de servicio / proxy estático para este proceso y luego usar sus credenciales para ejecutar el proceso. Debería asegurarse de que su contraseña sea segura y esté configurada para que nunca caduque, y necesita acceso al
EXECUTElote y ejecutar lo que sea que esté ejecutando el proceso por lotes y cualquier comando y recursos, etc. Se utiliza también.Parece que la opción
Run whether user is logged on or notDEBE marcar la opciónRun with highest privilegespara que realmente se ejecute como se espera del Programador de tareas.Comprobación de errores
Si hay un problema con el script por lotes real, pero el Programador de tareas de Windows realmente lo ejecuta para ejecutarlo, pero la lógica del script por lotes falla , etc. por cualquier razón, el Programador de tareas puede no ver este error en este nivel. Desde su perspectiva (por defecto la mayor parte del tiempo), está ejecutando el archivo por lotes, por lo que siempre que pueda ejecutarlo y tenga acceso para hacerlo, su trabajo se realiza con éxito.
Agregue la comprobación o el registro de errores a la lógica del script por lotes para detectar (o solucionar ) los problemas a este nivel, lo que incluye garantizar que el contexto de seguridad en el que el programador por lotes lo ejecute tenga el acceso adecuado a los comandos, recursos, etc.
Consideraciones de política de grupo
COMPRUEBE LA POLÍTICA DEL GRUPO E INICIE SESIÓN COMO PERMISOS DE TRABAJO POR LOTES
Lógica de secuencia de comandos por lotes con unidades asignadas o ruta completa de UNC, y problemas. . .
Si su secuencia de comandos hace referencia a una unidad de red asignada pero lo desea
Run whether the user is logged on or not, entonces, en este contexto, la asignación de unidad puede no estar allí para que el proceso por lotes haga lo que se espera.Si es posible, use
UNCrutas en su lógica de secuencia de comandos por lotes en lugar de una letra de unidad asignada para evitar problemas. De lo contrario, es posible que deba usarloPUSHD \\ServerName\ShareNameal comienzo del proceso por lotes y luego usarloPOPDal final del proceso por lotes. Puede asignar la unidadNET USE X: \\ServerName\ShareNameal comienzo del proceso por lotes y luego desconectar la unidadNET USE X: /DELETEal final del proceso por lotes.OTROS
MS HOTFIX (KB977353): el elemento de preferencia de tarea inmediata de directiva de grupo no se ejecuta en un equipo cliente que ejecuta Windows 7 o Windows Server 2008 R2
Mire la
Settingspestaña de la tarea programada y la opción listada comoStop the task if it runs longer than:. Si esta opción está marcada y el período de tiempo es inferior al de un script que se está ejecutando, el Programador de tareas lo eliminará antes y, por lo tanto, es posible que no obtenga los resultados esperados. Esto es algo más que debe verificar al solucionar problemas por si acaso.Desde la
Triggerspestaña de la tarea programada cuando seleccione laEditopción, asegúrese de establecer que laStart:hora y la fecha tengan un valor que NO haya pasado ya. Asegúrese de que esta tenga la fecha y la hora establecidas en un valor en el futuro . De lo contrario, puede observar que el trabajo indica que está programado para ejecutarse en la próxima hora programada como era de esperar; sin embargo, el Programador de tareas no lo ejecuta ni la pestaña Programador de tareasHistorymuestra que alguna vez se ejecutó (porque no lo es). Simplemente edite el activador y actualícelo con una fecha y / o hora futura para resolver este problema si lo está experimentando.IMPRESIÓN DE PANTALLAS
Imprimir pantalla A
Imprimir pantalla B
Imprimir pantalla C
fuente