none
Problema con script en planificador de tareas RRS feed

  • Pregunta

  • Buenos dias,

    He creado un script para convertir un fichero xls a xlsx. Al ejecutarlo desde el powershell funciona perfectamente, pero al incluirlo en el planificador, ejecuta, pero no me genera un fichero nuevo, es decir, no hace nada, pero da resultado como finalizado correctamente.

    He creado un .bat que llame al powershell, y nada, lo mismo. Comentar que este proceso funciona correctamente sobre un WinServer2008, el problema lo tengo en WinServer2012.

    Alguna pista o idea sober cual peude ser la razon?

    Muchisimas gracias


    • Editado Betea viernes, 18 de mayo de 2018 11:20
    viernes, 18 de mayo de 2018 11:19

Respuestas

  • Hola,

    Creo que lo que te ocurre es lo que puse sobre el uso de objetos COM.

    Te pongo aquí un enlace donde explican como debes configurar los permisos para que funcione de forma desatendida en la tarea programada.

    http://troyvssharepoint.blogspot.com.es/2012/07/stumbled-upon-interesting-one-today.html

    Sobre el código de salida 0 del script, "es normal". El script, a no ser que captures tú el error y en caso de existir realices una salida con código de error, siempre te va a devolver 0, ya que tu en realidad estás ejecutando powershell.exe, que se inicia y acaba correctamente, y al ejecutable le dices por parámetros que ejecute el script, pero el error de este no se "arrastra" al ejecutable que lanzó la tarea programada....

    jejeje, creo que esta última explicación no se entiende demasiado bien.

    Bueno, lo importante, que es la parte del Excel espero que la puedas solucionar con el link (yo tuve el mismo problema hace unos meses y con esa info quedó funcionando ok).

    Un saludo,

    Diego

    • Marcado como respuesta Betea martes, 22 de mayo de 2018 8:12
    lunes, 21 de mayo de 2018 10:28

Todas las respuestas

  • Comentar que existe algun otro ps1 planificado, que funciona correctamente, como por ejemplo, el que realiza un backup de una base de datos SQL.
    viernes, 18 de mayo de 2018 11:33
  • Hola:

    Los problemas con el programador de tareas se suelen suceder verificando lo siguiente:

    (Supongo que no estas copiando en una ruta compartida, porque si es esto, entonces, el asunto posiblemente viene por otra vía)

    Las pestañas de cualquier tarea son varias, por tanto te resumo las opciones, que a priori son indispensables.

    Pestaña 1: Ejecutar tanto si el usuario inicio sesión como si no.

    Ejecutar con privilegios

    Pestaña 2: Que el desencadenador este en estado habilitado

    Pestaña 4: Activar el equipo para ejecutar tarea

    Pestaña 5: Detener la tarea si se ejecuta durante más de x horas (si esta en ejecución porque no ha finalizado correctamente y tienes No iniciar una instancia nueva, no resolverá).

    Incluir el desplegable no inicar instancia nueva, porque si va de copiar y pegar archivos, para que no te de una excepcion del tipo InputOutput Exception.

    Además luego de guardar, puedes habilitar el historial de una tarea, para saber si realmente se ejecuta, o simplemente no inició.

    Ya comentas.

    viernes, 18 de mayo de 2018 12:28
  • En el primer parrafo, debiera decir subsanar, no suceder.

    Es pobile, que dado que las tareás son powershell, requieran de privilegios de administrador.

    Al menos debieras de probarlo así.

    Un saludo

    viernes, 18 de mayo de 2018 12:29
  • Muchas gracias por la respuesta Javi. Esta todo configurado tal y como me comentas, a excepcion de la pestaña 4. Tambien dispone de permisos de administrador,al igual que el resto de las tareas planificadas.

    Ya no es que no funcione a la hora que esta planificada, si no qeu no funciona al darle a iniciar manualmente, aun sabiendo que el script, ejecutado desde powershell, funciona a la perfeccion.

    viernes, 18 de mayo de 2018 12:34
  • Creo que si no te funciona al iniciar manual y tienes habilitado el historial, de las tareas, te va a guardar un log del porque para el no es valido. Puedes comprobarlo? y eso puede aportar más info, porque te marca id de evento categoria.....etc...

    Luego en el visor de eventos, creo que registro de aplicaciones, microsoft, Windows, TaskScheduler hay dos logs,.... que te pueden dar detalles, un poco más específicos.

    Es probable, que haya anotaciones, en otro lugar del visor de eventos, pero yo a priori los desconozco.

    viernes, 18 de mayo de 2018 12:54
  • Por cierto, el script para convertir a xlsx, al menos, en la parte de programación de C#, no se si en powershell es así, pero lo intuyo, requiere de tener registradas unas dlls tipo en el sistema. Como hablas de otra máquina, que si funciona, pero en esta no, es posible, que las dlls, requeridas, no esten????

    viernes, 18 de mayo de 2018 12:56
  • Hola,

    ¿El script utiliza "objetos externos a él"? Por ejemplo los objetos COM de Excel...

    Si es así, necesitas asignar seguridad en los objetos COM para que la tarea desatendida pueda utilizarlos.

    Lanzándolo a mano no hay ese problema.

    Si nos pones aquí el script tendremos mas información para poder ayudarte.

    Un saludo,

    Diego

    viernes, 18 de mayo de 2018 14:41
  • Muchas gracias por vuestras respuestas Diego y Javi,


    Lo pimero, mirando tanto el historial en el planificador de tareas, como los logs en el visor de eventos, se puede apreciar lo siguiente:

    El Programador de tareas completó correctamente la tarea "\StockChinaXLStoXLSX", instancia "{ff9341f6-7827-4e9f-95f5-f4a8dfafc1e8}", acción "C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.EXE" con el código devuelto 0.

    Parece que todo va correctamernte, o al menos, no existe ningun fallo.

    Os copio el script por si os da alguna pista de donde peuda estar el fallo:

    Add-Type -AssemblyName Microsoft.Office.Interop.Excel
    $xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlOpenXMLWorkbook
    write-host $xlFixedFormat
    $excel = New-Object -ComObject excel.application
    $excel.visible = $true
    $folderpath = "C:\Users\Public\Documents\Stock In Central"
    $filetype ="*xls"
    Get-ChildItem -Path $folderpath -Include $filetype -recurse | 
    ForEach-Object `
    {
    	$path = ($_.fullname).substring(0, ($_.FullName).lastindexOf("."))
    	
    	"Converting $path"
    	$workbook = $excel.workbooks.open($_.fullname)
    
    	$path += ".xlsx"
    	$workbook.saveas($path, $xlFixedFormat)
    	$workbook.close()
    	
    	
    }
    $excel.Quit()
    $excel = $null
    [gc]::collect()
    [gc]::WaitForPendingFinalizers()
    $excel.Close




    • Editado Betea lunes, 21 de mayo de 2018 9:50
    lunes, 21 de mayo de 2018 8:35
  • Como puedo asignar los permisos a las objetos COM tal y como me habeis comentado?

    Muchas gracias



    • Editado Betea lunes, 21 de mayo de 2018 10:39
    lunes, 21 de mayo de 2018 10:25
  • Hola,

    Creo que lo que te ocurre es lo que puse sobre el uso de objetos COM.

    Te pongo aquí un enlace donde explican como debes configurar los permisos para que funcione de forma desatendida en la tarea programada.

    http://troyvssharepoint.blogspot.com.es/2012/07/stumbled-upon-interesting-one-today.html

    Sobre el código de salida 0 del script, "es normal". El script, a no ser que captures tú el error y en caso de existir realices una salida con código de error, siempre te va a devolver 0, ya que tu en realidad estás ejecutando powershell.exe, que se inicia y acaba correctamente, y al ejecutable le dices por parámetros que ejecute el script, pero el error de este no se "arrastra" al ejecutable que lanzó la tarea programada....

    jejeje, creo que esta última explicación no se entiende demasiado bien.

    Bueno, lo importante, que es la parte del Excel espero que la puedas solucionar con el link (yo tuve el mismo problema hace unos meses y con esa info quedó funcionando ok).

    Un saludo,

    Diego

    • Marcado como respuesta Betea martes, 22 de mayo de 2018 8:12
    lunes, 21 de mayo de 2018 10:28
  • Hola,

    Creo que lo que te ocurre es lo que puse sobre el uso de objetos COM.

    Te pongo aquí un enlace donde explican como debes configurar los permisos para que funcione de forma desatendida en la tarea programada.

    http://troyvssharepoint.blogspot.com.es/2012/07/stumbled-upon-interesting-one-today.html

    Sobre el código de salida 0 del script, "es normal". El script, a no ser que captures tú el error y en caso de existir realices una salida con código de error, siempre te va a devolver 0, ya que tu en realidad estás ejecutando powershell.exe, que se inicia y acaba correctamente, y al ejecutable le dices por parámetros que ejecute el script, pero el error de este no se "arrastra" al ejecutable que lanzó la tarea programada....

    jejeje, creo que esta última explicación no se entiende demasiado bien.

    Bueno, lo importante, que es la parte del Excel espero que la puedas solucionar con el link (yo tuve el mismo problema hace unos meses y con esa info quedó funcionando ok).

    Un saludo,

    Diego

    Gracias por tu respeusta Diego, muy bien explicado lo del error, tranquilo que lo he entendido. Pero tengo un problema.....

    parece que esta caido el enlace que me has enviado... :(

    edit: Mirando el blog, ya la fecha del articulo que me has enviado, he encontrado esto, peude ser lo que querias enviarme?

    http://troyvssharepoint.blogspot.com.es/2012/07/stumbled-upon-interesting-one-today.html

    • Editado Betea lunes, 21 de mayo de 2018 11:26
    lunes, 21 de mayo de 2018 11:25
  • EN el paso 6, "Add ExcelAppPoolAct ", se supone que esto es un usuario que tiene que estar disponible para añadir? Porque no lo veo por ningun lado...

    • Editado Betea lunes, 21 de mayo de 2018 13:37
    lunes, 21 de mayo de 2018 13:30
  • Hola,

    Entiendo que has conseguido llegar al enlace viendo esta pregunta.

    Ese usuario es el que esté configurado para ejecutar la tarea programada en tu sistema.

    Un saludo,

    Diego

    lunes, 21 de mayo de 2018 14:57
  • Buenos dias Diego,

    Lo primero, muchisiams gracias por tu ayuda, por fin lo he conseguido! Ayer a ultima hora segui los pasos, dando permisos a las carpetas para el excel de 64bits, pero seguia sin funcionar.

    Hoy por la mañana, he añadido permisos tambien sorbe las carpetas de 32 bits, y por fin, he conseguido que me convierta el excel ejecutando desde el planificador de tareas. Soo falta qeu ahora, lo ejecuta a la hora planificada.

    Muchisimas gracias por ofrecerme vuestra ayuda, a los 2!!!

    martes, 22 de mayo de 2018 8:14
  • Buenos dias,

    Refloto este hilo, ya que me he encontrado de nuevo con este problema, en el mismo sitio.... En el sercivodr en cuestion, se ha desinstalado/instalado varias veces el office, en varias versiones diferentes, y esto ha provocado que vuelva el problema. En este caso, si ejecuta manualmente desde le programadro de tareas el proceso va bien, epro de forma planificada no...

    Googleando el problema, me he encontrado con este post mio abierto hace 2 años. He intentado seguir los pasos del BLOG

    Pero la primera en la frente. El primer paso ya es imposible que lo cumpla:

    Y mirando donde comenta, no encuentro el elemento DCOM del excel...

    Puedo añadirle un nuevo punto a este arbol?

    Estoy muy perdido en este tema..

    Muchas gracias!


    • Editado Betea viernes, 28 de febrero de 2020 9:24
    viernes, 28 de febrero de 2020 9:22