
El problema se produce en un sistema Windows 7 con las últimas actualizaciones, en una red con un servidor Windows 2008r2 en un entorno sin dominio AD.
Desde el Explorador de archivos, o dentro de una aplicación, puedo acceder a \\server\share utilizando las credenciales guardadas. Tengo acceso de lectura/escritura según los derechos de cuenta del usuario en el servidor. Desde una ventana de comando, puedo escribir "net use \\server\share" y obtendré algunos detalles, seguido de "comando completado exitosamente".
Desde un archivo por lotes CMD iniciado desde una tarea programada, net use \\server\share a veces bloqueará el script porque solicita el nombre de usuario y la contraseña.
Puedo ver la ventana de la tarea de programación fallida congelada con el mensaje. Puedo iniciar otra ventana de comandos y escribir "net use \\server\share" y funciona.
Cuando se ejecuta como una tarea programada:
Cuando encuentro la tarea detenida y la ejecuto desde una ventana de comandos:
Si vuelvo a ejecutar la tarea programada desde el Programador de tareas, se ejecutará correctamente y no se bloqueará en Net Use. Sólo cuando el sistema inicia la tarea parece tener problemas para iniciar sesión.
¿Por qué el uso de la red a veces solicita credenciales (que se guardan en la máquina local)? ¿Cómo puedo hacer que esta tarea programada se ejecute de manera confiable?
Respuesta1
El problema parece ser que después de alguna actualización reciente de Windows, las tareas programadas elevadas ya no pueden usar de manera confiable las credenciales almacenadas para el acceso a la red, aunque se estén ejecutando como Usuario principal y no como Sistema.
No quería desactivar UAC globalmente en la máquina por este problema. No quería poner el nombre de usuario y la contraseña en el archivo CMD de la tarea.
Mi solución de compromiso es crear una nueva cuenta con privilegios específicos y limitados en el servidor para esta tarea. Creé un nuevo recurso compartido en el servidor para el recurso específico que necesita esta tarea. (compartido especial) En la tarea programada, elimino todos los inicios de sesión existentes (ya que a veces parecen estar presentes), luego me conecto al servidor con las credenciales de cuenta limitadas (en el archivo CMD).
NET USE \\server /D
NET USE \\server /U:limiteduser junkpassword
... run the rest of the scheduled task, perform network access to \\server\specialshare...
NET USE \\server /D
No es ideal, pero parece funcionar. Si tiene un mejor enfoque, comente.