psxec ejecutar un BAT remotamente que cambia ip, crea puerto etc

Tenemos un bat que hace esto

netsh interface ipv4 set address "local" static 192.168.128.138 255.255.255.0 192.168.128.249
netsh interface ipv4 set dns "local" static 192.168.128.250
timeout /t 10

ipconfig /flushdns


timeout /t 10

cscript "C:\Windows\System32\Printing_Admin_Scripts\es-ES\prnport.vbs" -a -r 192.168.128.65 -h 192.168.128.65 -o raw -n 9100
cscript "C:\Windows\System32\Printing_Admin_Scripts\es-ES\prnport.vbs" -a -r 192.168.128.67 -h 192.168.128.67 -o raw -n 9100
cscript "C:\Windows\System32\Printing_Admin_Scripts\es-ES\prnport.vbs" -a -r 192.168.128.63 -h 192.168.128.63 -o raw -n 9100
cscript "C:\Windows\System32\Printing_Admin_Scripts\es-ES\prnport.vbs" -a -r 192.168.128.60 -h 192.168.128.60 -o raw -n 9100
cscript "C:\Windows\System32\Printing_Admin_Scripts\es-ES\prnport.vbs" -a -r 192.168.128.57 -h 192.168.128.57 -o raw -n 9100
cscript "C:\Windows\System32\Printing_Admin_Scripts\es-ES\prnport.vbs" -a -r 192.168.128.58 -h 192.168.128.58 -o raw -n 9100
cscript "C:\Windows\System32\Printing_Admin_Scripts\es-ES\prnport.vbs" -a -r 192.168.0.63 -h 192.168.0.63 -o raw -n 9100
Crea los puertos de impresión, para que luego solo tengamos que cambiar el puerto... las impresoras no se llaman igual..... MEA CULPA... si no intentaría cambiar
el puerto a la impresora llamda PEPITA
timeout /t 10

xcopy c:\utiles\as400.acceso\MONRMED5.ws C:\utiles\00.basico\as400\ /y
Cambia la configuración, de cada puesto una línea,
una pena por que ese dato es común a todos, pero lo tengo que personalizar por que va con cada puesto...
timeout /t 10

xcopy no.tocar.bat C:\utiles\dns.emergencia\ /y
Ejecuta un Bat que cambia, una cosa del inicio de sesión
de un usuario de emergencia que tenemos en local.
timeout -t 5

xcopy hosts c:\windows\system32\drivers\etc\ /y
cambia unos datos del host


copiando host, notocar.bat,migra01 a cada puesto.

Pues lo ejecuto con:

psexec \\remotemachine -u remoteuser -i -d cmd -c localdisk:\folder\batchfile.bat

pantallazo.
Imagen
ero no hace nada... parece que se lanza un proceso... pero no cambia.

Aver entro puesto a puesto por psexec al cmd.exe, y lanzo el bat, con psexec... pero

yo quería a esa línea que puse, agregarle que me cogiera de un txt los puestos... y vuala....


Gracias por vuestro tiempo chicos.
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.
Gracias Gracias Gracias!!!!!
Sencillamente mi gente de EOL siempre está ahi!!!

Epa!!! ya te cuento como fue la migración!!!

@JuananBow lo único que le metí un "ohnsr-029\c$\útiles\migra01.bat

Al ejecutrlo incluso con -s después de -f me funciona todo menos el hosts, lo que hacia que machacase.
Vale, es que no repase el .bat que tenías hecho, pero por esto me refería a que tuvieras en cuenta desde dónde se ejecuta el archivo copiado con -c lanzado con el psexec.

Como te dije, cuando lanzas remotamente un script con -c, lo que hace psexec es primero copiar el programa que quieres lanzar (en este caso el migra01.bat) al directorio remoto %WINDIR%\SYSTEM32 para luego ejecutarlo desde esa ubicación en el equipo remoto. Así pues, al llegar a la línea del archivo hosts
xcopy hosts c:\windows\system32\drivers\etc\ /y
en esencia estabas diciendo que copiara el archivo %WINDIR%\SYSTEM32\hosts a c:\windows\system32\drivers\etc\. Y como el archivo hosts no existía en esa ubicación, el script fallaba al final. Tanto si forzabas la copia con -f, como si lo ejecutabas en el contexto SYSTEM con -s. El resultado era negativo por un fallo en la ruta.

La solución era igualmente sencilla. O bien tenías que haber especificado manualmente el origen de tu archivo de hosts:
xcopy C:\utiles\hosts c:\windows\system32\drivers\etc\ /y

o bien haber forzado la ruta correcta al principio del .bat poniendo al principio del script:
CD /D "C:\utiles"

(Todo esto asumiendo que el archivo hosts que querías copiar se encontraba en C:\utiles).

Básicamente, al poner que psexec lanzara el script, sin copiar, desde la ubicación en red a través de la compartición administrativa C$, te ha funcionado; porque xcopy ha copiado desde \\ohnsr-029\c$\utiles\hosts. Sinceramente, un poco rebuscado y con altas probabilidades de fallo... Pero si ha funcionado, fetén! ratataaaa
Que conste, que me di cuenta, luego, y lo añadi, pero no lo reporte por que estaba liado.
Un 10 por la aclaración, y las dos maneras que planteas, de situar la ruta. y por la dedicación.

Los bat migra01.bat son únicos por cada puesto, su ip fija, y un copiado de la sesión de trabajo especifica, con lo cual
no me vale copiarlo desde mi pc.

Pero por ejemplo me van a pedir poner los pcs por DHCP,
si hago un dhcp.bat, y pongo la línea de netsh... tal tal tal..., lo pongo en mi pc en C:\scripts\dhcp.bat
si uso -c, pongo la ruta de ese bat en mi PC, y ello solo lo copia a system32, y lo ejecuta desde allí no?
Pondría de ruta "c:\scripts\dhcp.bat

Te cuento como fue ;)
Que me toca tb cambia la ip al DC, aunque parece que no es complicado, server DNS y DHCP tb tiene esas roles.
Sí. Con el modificador -c, la ruta que indiques es la ubicación local del programa para copiar al SYSTEM32 remoto y ejecutar desde ahí. Sin el modificador -c, la ruta que indiques es la ubicación remota del programa para ejecutar desde esa misma ruta, y en el caso de no haber especificado ruta, desde SYSTEM32.
Cambiar los puestos fue un minuto.

Gracias.
6 respuestas