none
Windows 2008 R2 no cambia de directorio en un script RRS feed

  • Pregunta

  • Hola

    El problema que me encuentro es bastante frecuente. Se ven varias propuestas de soluciones en Internet, pero no he dado con la solución a mi caso.

    En un Windows 2008 R2 tengo un script que intenta cambiar a una unidad de red "Z:" y allí ejecutar una Base de Datos Access para que su autoexec la actualice.

    Ejecutando el script a mano, funciona correctamente, pero como tarea no funciona.

    He llegado a probar que cuando dentro del script hago un comando Z:

    y a continuación un comando cd el resultado, en lugar de ser el directorio que tiene mapeado Z: (un servidor de archivos CIFS) responde con C:\Windows. Es decir, el directorio raíz del servidor Windows 2008.

    ¿Alguien me puede decir si han podido solucionar esto?

    He probado con chdir y ocurre lo mismo.

    En el script tengo puesto el directorio Iniciar en ...

    Si necesitan más información para resolverlo, me lo piden y os la doy.

    Muchas gracias.

    lunes, 12 de marzo de 2018 10:52

Todas las respuestas

  • Hola,

    Pués lo primero que comprobaría yo es si el usuario "desatendido" de la tarea programada tiene acceso a esa unidad de red.

    Cuando lo ejecutas a mano accedes con tu usuario, pero cuando lo ejecuta la tarea programada o lo hace con el usuario del servicio o lo hace con el usuario que tú indiques en la tarea.

    Por otro lado, ¿necesitas crear esa unidad Z:? 

    Si accedes mediante ruta UNC (\\server\share\file), ¿tienes los mismos errores o el comportamiento es diferente?

    Un saludo,

    Diego

    martes, 13 de marzo de 2018 12:30
  • Hola Diego,

    Gracias por la velocidad de respuesta.

    El usuario tiene permisos totales en esa carpeta.

    La unidad Z: ya está mapeada, no hay que crearla. Dentro de esa carpeta está la BBDD access que hay que ejecutar para que su macro de autoexec la actualice.

    Cuando entro al servidor Windows 2008 R2 (donde tengo la tarea) y allí voy al Explorador de Windows, en la dirección pongo \\servidor\directorio\access.accdb se ejecuta la BBDD y funciona  el autoexec.

    El problema sólo aparece cuando esto lo debe hacer la tarea.

    Incluso el script que ejecuta la tarea lo primero que hace es cambiar de Unidad Intenta ir a la "Z:"), pero realmente el sistema operativo no ejecuta esa instrucción.

    Lo sé porque antes de hacer el "Z:" ejecuto un comando "cd" y la respuesta es "c:\windows"

    Una vez hecho el "Z:" hago otro "cd" y la respuesta es la misma "C:Windows".

    Es evidente que hay algo que se escapa y creo que cada vez e lleva más ventaja....

    Muchas gracias por tu interés.

    Daniel

    martes, 13 de marzo de 2018 14:02
  • Hola de nuevo,

    Pero entonces, ¿Z: es una unidad local o una unidad de red mapeada?

    Te explico a donde quiero llegar: las unidades mapeadas, por defecto, son por usuario, de modo que para el usuario del servicio de Tareas Programadas esa unidad no tiene porque estar mapeada aunque en una sesión interactiva si lo esté.

    ¿Tienes forma de capturar la salida del comando Z:? Para ver si te indica que la unidad no existe o algo similar.

    Por otro lado, ¿has probado a que la tarea en lugar de llamar directamente a la BD de Access llame al ejecutable de Access y le pase como parámetro el documento a abrir?

    Así por lo menos se podría comprobar si la ejecución llega a hacerse y acotar mas si realmente es un problema de acceso al documento.

    Es dificil localizar este tipo de errores sin poder hacer pruebas "in situ".

    martes, 13 de marzo de 2018 14:10
  • Hola,

    ¡Gracias por seguir intentándolo!.

    La unidad Z: está mapeada.  Concretamente viendo el explorador de Windows pone

       Directorio (\10.1.1.4)(Z:)                          donde 10.1.1.4 es la IP del CIFS donde está la BBDD

    ==================

    El script de prueba que tengo es este:

    cd >\\documentos\ColPRD\Salida_comandos1.txt

    Z:  >\\documentos\ColPRD\Salida_comandos2.txt 2>\\documentos\ColPRD\Salida_comandos3.txt

    cd >\\documentos\ColPRD\Salida_comandos4.txt

    y el contenido de los 4 ficheros de salida son:

    Salida_comandos1.txt à   C:\Windows

    Salida_comandos2.txt  vacío (tamaño = 0)

    Salida_comandos3.txtà The system cannot find the drive specified.

    Salida_comandos4.txtà C:\Windows

    =============

    ¡Respecto a probar llamar a la BBDD como parámetro me parece una buena idea!.

    Lo he probado ahora mismo.

    En los parámetros de la tarea he puesto en:

    Start Programà  el path completo (con comillas) del MSACCESS.exe

    Add Agruments à con comillas el path completo de la BBDD

    Start inà  he probado dos veces: una con el path donde está la BBDD y otra con este parámetro vacío.

    En los dos casos estuvo un rato en “Running” pero realmente no hizo nada.

    Tampoco dio mensajes de error en la historia de eventos.

    El resultado es “Completed”, pero no ejecutó el Access.

    ===========================

    Ultima prueba, todo igual pero poniendo en “Start in” el path de donde está el Access en el servidor. O sea, lo mismo que en Start Program pero sin MSACCESS.exe.

    Pero no ejecuta la BBDD.

    Muchas gracias por intentar ayudarme.

    Perdona, no te dicho una cosa.

    Si en el script le añado un dir >\\documentos\colPRD\salida_dir1.txt el contenido de este fichero es un dir del directorio Windows del servidor 2008 R2.

    Supongo que lo habrás imaginado, pero por si se te plantea la duda...

    Gracias de nuevo


    martes, 13 de marzo de 2018 14:56
  • Hola,

    Pués lo que te está diciendo en los comandos y la salida es exactamente lo que comentabamos:

    Salida_comandos3.txtà The system cannot find the drive specified.

    No existe la unidad Z en esa sesión.

    ¿Tu script la crea o asume que existe? Prueba con un net use Z: \\servidor\share en el script si no lo estás haciendo ya.

    Independientemente, otro problema que es muy posible que tengas después será que la ejecución "en segundo plano" del Access (o de cualquier otro componente de Office), suele generar un error de acceso denegado ya que en una gran cantidad de casos requiere el uso del componente DCOM correspondiente, para los que no hay permisos por defecto en una ejecución mediante tarea programada.

    Esto es solucionable, pero hasta que no lleguemos ahí mejor no tocamos nada ya que hay que hacer cambios a nivel de DCOM.

    Un saludo,

    Diego

    martes, 13 de marzo de 2018 16:30
  • Hola otra vez,

    Parece que esto sí ha funcionado!

    He seguido tu sugerencia de hacer el 

    net use Z: \\servidor\share

    Mañana confirmaré que lo hace automáticamente.

    Lo que veo es que la tarea en "Running". Pero le daré tiempo al timeout para que se cancele.

    Mañana sabré el resultado.

    Muchas gracias. ¡¡Buen trabajo!!

    Daniel

    miércoles, 14 de marzo de 2018 11:24
  • Hola otra vez,

    Confirmado!.  Funciona!.

    Muchas gracias

    Saludos

    Daniel

    jueves, 15 de marzo de 2018 6:01
  • Ok. Me alegro que te sirviera.

    Un saludo,

    Diego

    jueves, 15 de marzo de 2018 9:05