Tengo un trabajo del Programador de tareas para ejecutar Robocopy para realizar copias de seguridad de archivos locales en un recurso compartido de red. Tengo que usar credenciales de dominio para acceder al recurso compartido de red, pero la computadora local no está en el dominio y el trabajo se ejecuta como administrador local. Esta soluciónde mapear y desasignar temporalmente el recurso compartido de red funciona, pero deja mi contraseña expuesta en texto sin formato para cualquiera que vea las acciones de trabajo del Programador de tareas. Preferiría asignar la unidad de red normalmente de forma semipermanente, por lo que el trabajo del Programador de tareas solo tiene que ejecutar Robocopy y consultar la letra de unidad correspondiente. Sin embargo, siempre aparece el error "El sistema no puede encontrar la ruta especificada". en el registro de Robocopy al ejecutar esto desde el Programador de tareas, aunque el comando funciona bien desde un símbolo del sistema elevado (el trabajo está configurado para ejecutarse con los privilegios más altos). También tenga en cuenta que he hecho este ajuste de registro para acceder a las unidades asignadas desde un símbolo del sistema elevado.
EDITAR: Para aclarar, conectado como administrador local, inicio Windows Explorer como administrador. Asigno el recurso compartido de red a la letra de unidad Y. Lanzo el símbolo del sistema como administrador y ejecuto
C:\Windows\System32\Robocopy.exe C:\temp Y:\temp
Funciona bien. Creo un trabajo del Programador de tareas para ejecutar exactamente el mismo comando, ya sea que el usuario haya iniciado sesión o no, con los más altos privilegios. Lo ejecuto y obtengo un error. Escribo en un registro y obtengo
ERROR 3 (0x00000003) Getting File System Type of Destination Y:\temp\
The system cannot find the path specified.
seguido por
ERROR 3 (0x00000003) Creating Destination Directory Y:\temp\
The system cannot find the path specified.
fuente
Respuestas:
Las unidades asignadas son un concepto de interfaz de usuario y no están disponibles para tareas en segundo plano como esa. Acceda al objetivo a través de UNC y asegúrese de que el usuario que ejecuta la tarea tenga acceso al objetivo.
fuente
En mi caso, todo lo que tenía que hacer era desmarcar la
run with highest privileges
bandera pero estaba ejecutando la tarea en el mismo usuario que el usuario que asignó la unidad.fuente
Intenta usar:
dentro de un archivo por lotes de su tarea programada. Las unidades compartidas de red solo están disponibles desde un entorno administrado por el usuario. "pushd" permitirá que se ejecute en el contexto del script.
Cuando termine de usar:
para desasignar el disco.
Referencia: https://blog.adrianbanks.co.uk/windows/2007/03/08/accessing-network-file-shares-from-a-command-prompt.html
fuente
Otra opción es usar la ruta de red completa, ya que Robocopy los admite. es decir, robocopy c: \ temp \\ server \ share \ temp
O mejor aún, ejecute la copia de seguridad en el servidor. Cree una cuenta de administrador de dominio solo para el proceso de copia de seguridad. Alimente robocopy la contraseña de un archivo de texto al que solo los administradores de dominio pueden acceder.
Hace años, creé varios scripts .cmd que harían una copia de seguridad de los archivos esenciales para cada sistema de la red de esta manera. El único programa externo que utilicé fue el comando Grep de Cgywin y un remitente de correo smtp del símbolo del sistema.
Hice un script que escanearía la red en busca de sistemas. Crearía un archivo de texto con todos los nombres de los sistemas y me alertaría por correo electrónico de cualquier sistema nuevo que encontrara. (Tenía un archivo de configuración que analizaría para que los sistemas lo omitieran). Cada nuevo sistema tenía un directorio de respaldo creado y un archivo de configuración de respaldo colocado en él. El usuario podría modificar este archivo y enumerar los directorios que necesitaban copia de seguridad. También podrían especificar el tiempo para sus copias de seguridad para que no suceda cuando estaban en la oficina. Ejecuté este script en el servidor cada 5 minutos, ya que no tomó tiempo de procesamiento y me gusta la característica de seguridad de alertarme cuando se conectó un nuevo sistema a la red.
Otro script analizaría todos los archivos de configuración de respaldo individuales y programaría una tarea para ejecutar un respaldo en ese sistema. Esto se ejecutó diariamente a las 12:01 am.
Finalmente, el script de copia de seguridad analizaría el archivo de configuración que le pasó el planificador y el uso de robocopy copiaría todos los archivos. Tuve un error completo al verificar los archivos de configuración, ya que los usuarios los editarían, y recibiría correos electrónicos sobre cualquier problema.
Los usuarios podían leer sus archivos de respaldo, pero no podían eliminar el respaldo. Esto proporcionó cierta protección contra el daño de un posible empleado descontento.
Probablemente se podría haber hecho algo mucho más elegante en .vbs o powershell, pero en realidad no soy un programador. Mis clases de programación incluyeron Cobal y JCL. Recuerdo que copié los guiones cuando me fui, pero quién sabe dónde están ahora.
fuente
Superé el problema cambiando la opción "Ejecutar si el usuario inició sesión o no" a "Ejecutar solo cuando el usuario inició sesión". Prueba esto, puede ayudarte.
fuente
Crear este script de PowerShell, programar el trabajo como SYSTEM y configurarlo para que se ejecute al reiniciar me permitió usar letras de unidad en mis scripts, ya que UNC no es una opción debido a un dolor de cabeza por otros problemas.
fuente
cmd /c net use
entrada de trabajo antes de la entrada del trabajo de copia en la tarea y eso solucionó mi problema. Su publicación fue la primera después de cuatro horas de encontrar cuentas espejo sugeridas que proporcionaron una solución fácil. ¡Sigan con el buen trabajo!\\ServerName\ShareName
en este tipo de lógica. Además, esto no necesariamente tiene que ser PowerShell, ya que también seNET USE
ejecuta por lotes y en cuanto a la programación con el Programador de tareas como la cuenta del SISTEMA, puede hacerlo independientemente del tipo de script, lógica, etc. que programe para ejecutar a través de la Tarea ProgramadorNET USE \\<ServerName>\<ShareName> <password> /user:<domain>\<username>
así y no tener que especificar una letra de unidad si la autenticación solo para el recurso compartido es lo que se necesita en lugar de la letra de unidad real.Intente cambiar la ubicación "inicio en" a "c: \". Esto pareció solucionarlo para mí, por lo que tal vez el sistema estaba impidiendo que cmd.exe se ejecute desde el predeterminado \ windows \ system32 \ como una característica de seguridad.
fuente
Tuve el mismo problema al intentar acceder a r: /xxxfilename.txt con una unidad asignada de Windows r: \ server \ share al llamar a un script desde el programador de tareas de Windows.
Lo resolví usando //server/share/xxxfilename.txt
Tenga en cuenta que la barra diagonal inversa se convirtió en barra diagonal.
Ahora mi script bash cygwin se ejecuta en el programador de tareas de Windows y el shell cygwin.
Nota: el comando " net use " puede acceder a las unidades de mapa en el shell pero muestra R no disponible: cuando ejecuto este comando en el Programador de tareas de Windows.
fuente
Como señaló otro usuario, parece que funciona la opción "Ejecutar si el usuario inició sesión o no" en "Ejecutar solo cuando el usuario inició sesión". Luego puede usar la ruta asignada (por ejemplo, Z :) o la ruta del servidor (por ejemplo, \\ ServerName \ Path).
Por supuesto, si usa esta opción, debe hacer lo que dice y asegurarse de haber iniciado sesión en el servidor como usuario con acceso a la unidad correspondiente. Recuerdo estar en una empresa más antigua con una serie de trabajos configurados como este. Un día alguien "cerró sesión" en el servidor de trabajos principal, sin esperar que eso tuviera algún tipo de impacto ya que no estaban apagando la máquina de ninguna manera ...
Además, en estos días, a Windows le gusta hacer muchos reinicios del sistema auto invocados. Por lo tanto, use esta solución bajo su propio riesgo.
fuente
También tenga en cuenta que si realiza la asignación en el script y la contraseña contiene%, entonces debe escribirse %% para que el script funcione desde el programador de tareas, pero% para trabajar desde el comando
fuente
uno puede usar los siguientes comandos, que se agregarán en la secuencia de comandos por lotes en sí, para ejecutar la secuencia de comandos Batch desde la tarea de programación de Windows para obtener dir, archivo copiado en el sistema local usando la tarea de programación de Windows; uso neto Y: "\\ xxx \ xxx \ xxx cd / d Y: usuario neto / d Y: / Y
fuente
Gracias, creo que el uso de "iniciar en c: \" resolvió mi problema. Seguiré este problema para confirmar que está resuelto.
Estaba teniendo el mismo problema, si hacía clic directamente en el lote, se ejecutó sin problemas pero no bajo la tarea programada.
fuente