Básicamente el problema lo tienes con el modificador -c y el programa que estás ejecutando. Le estás poniendo que ejecute el
cmd y luego copie el script, mientras que lo que
psexec está interpretando es: ejecútame
cmd -c localdisk:\folder\batchfile.bat. La solución es bien sencilla: no necesitas especificar que lance
cmd para luego cargar el script, simplemente omite la parte de
cmd y con eso debería funcionar. Si el Windows remoto no tiene fastidiada la asociación del archivo .bat, debería lanzar el script correctamente.
psexec \\oh*****0 -u oh****r\Administrador -p ********** -i 0 -d -c -f "C:\utiles\migra01.bat"
Y luego unos apuntes:
- El modificador
-i es obligatorio para ejecutar cosas en Windows Vista o superior. Si pones un número, brotará la ventana de lo que mandas ejecutar en la sesión del usuario al que corresponda el número (se puede ver el número de sesión en el administrador de tareas). Para asegurarme que no se vea nada, pongo siempre
-i 0 que significa sesión de consola.
- Si hay algún problema de permisos, puedes pasar a ejecutar las cosas como
NT AUTHOSRITY\SYSTEM usando el modificador
-s. Aquí no debería de haber ningún problema, pero no está de más tenerlo en cuenta.
- Cuando usas
-c, copias el programa (o script) que pretendes ejecutar a
%WINDIR%\SYSTEM32 del equipo remoto para ejecutarlo desde ahí. Si el archivo ya existe en el equipo remoto,
psexec pasa de copiarlo y lo ejecuta directamente. Puedes forzar la copia si usas el modificador
-f. Es especialmente útil cuando estás ejecutando scripts que estás actualizando constantemente.
- Una vez que acaba la ejecución remota del programa, lo que hayas copiado con -c se queda en el equipo remoto; no se borra. Tenlo en cuenta por si tienes que realizar alguna limpieza.