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 Scheduler
en el trabajoProperties
(ver abajo la mayoría de las capturas de pantalla) en. . .1.
General
pestañ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 on
Run whether user is logged on or not
Run with the highest privileges
2.
Conditions
pestañ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 task
3.
Actions
tabule, haga clicEdit
y 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 alEXECUTE
archivo 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
EXECUTE
lote 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 not
DEBE marcar la opciónRun with highest privileges
para 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
UNC
rutas 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\ShareName
al comienzo del proceso por lotes y luego usarloPOPD
al final del proceso por lotes. Puede asignar la unidadNET USE X: \\ServerName\ShareName
al comienzo del proceso por lotes y luego desconectar la unidadNET USE X: /DELETE
al 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
Settings
pestañ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
Triggers
pestaña de la tarea programada cuando seleccione laEdit
opció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 tareasHistory
muestra 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