PsExec (SysInternals) – Herramienta de ejecución remota de comandos.

PsExec está considerado el más útil del paquete PsTools. Ejecuta comandos en el sistema remoto, incluso enviando un programa si no lo encontramos en el sistema objetivo. No necesita instalar DLL de apoyo, o aplicaciones de servidor especiales, sin embargo debemos de tener acceso al recurso compartido ADMIN$ y las credenciales adecuadas para que esta herramienta funcione.

Por defecto no viene con el sistema operativo y es necesario descargárselo de la web de Microsoft (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx). Cuando lo tengamos descargado simplemente debemos dejarlo en la ruta donde lo queramos ejecutar (C:\Windows\System32 es una buena ruta)

Si el nombre o la ruta del programa contienen espacios, debemos ponerlos entre comillas, si el programa no existe en el equipo objetivo, usamos la opción -c. Esto no lo copiará, desde el sistema que está ejecutando PsExec, al directorio \\NombreDelEquipo\System32. -f sobrescribe el archivo si éste ya existía.

En principio, podríamos usar -c para enviar todo un conjunto de herramientas al objetivo. Si creemos que un archivo ya existe y queremos sobrescribirlo con una versión más reciente, podemos usar la opción -v junto con -c. La opción -v indica a psexec que sólo debe copiar el archivo si el número de versión o si la marca de fecha es más actual.

También podemos controlar cómo se ejecuta la aplicación remota estableciendo su prioridad (-low, -belownormal, -abovenormal, -high, -realtime) y los procesadores de un equipo con varias CPU, usando la opción -a. Especificamos los procesadores mediante un número después de la opción -a, como -a 1,2 para usar los procesadores 1 y 2 en un sistema con cuatros CPU.

La Sintaxis es como sigue:
psexec [\\computer[,computer2[,…] | @file]][-u user [-p][-s|-e][-x][-i [session]][-c [-f|-v]][-w directory][-d][-][-a n,n,… psswd][-n s][-l] cmd [arguments]

Donde cada elemento se describe de la siguiente manera:
• Equipo: Dirige PsExec para que ejecute la aplicación en el equipo o equipos especificados. Si omite el nombre de equipo, PsExec ejecuta la aplicación en el sistema local y si escribe un nombre de equipo «\\*», PsExec ejecuta las aplicaciones en todos los equipos del dominio actual.
• @file: Indica a PsExec que ejecute el comando en cada equipo incluido en el archivo de texto especificado.
• -a: Separa los procesadores en los que la aplicación se puede ejecutar con comas, donde 1 es la CPU de número inferior. Por ejemplo, para ejecutar la aplicación en la CPU 2 y la CPU 4, escriba: «-a 2,4»
• -c: Copia el programa especificado en el sistema remoto para su ejecución. Si omite esta opción, la aplicación debe estar en la ruta de acceso de sistema del sistema remoto.
• -d: No espere a que la aplicación termine. Use esta opción sólo para aplicaciones no interactivas.
• -e: No carga el perfil de cuenta especificado.
• -f: Copia el programa especificado, incluso si el archivo ya existe en el sistema remoto.
• -i: Ejecuta el programa para que interactúe con el escritorio de la sesión especificada en el sistema remoto. Si no hay ninguna sesión especificada, el proceso se ejecuta en la sesión de consola.
• -l: Ejecuta el proceso como usuario limitado (desmonta el grupo Administradores y permite sólo privilegios asignados al grupo Usuarios). En Windows Vista, el proceso se ejecuta con integridad baja.
• -n: Especifica el tiempo de espera en segundos al conectar a equipos remotos.
• -p: Especifica la contraseña opcional del nombre de usuario. Si omite este valor, se le pedirá que introduzca una contraseña oculta.
• -s: Ejecuta el proceso remoto en la cuenta del sistema.
• -u: Especifica el nombre de usuario opcional para iniciar sesión en el equipo remoto.
• -v: Copia el archivo especificado sólo si tiene un número de versión superior o es más nuevo que el del sistema remoto.
• -w: Establece el directorio de trabajo del proceso (con respecto al equipo remoto).
• -x: Muestra la UI en el escritorio de Winlogon (sólo sistema local).
• -priority: Especifica -low, -belownormal, -abovenormal, -high o -realtime para ejecutar el proceso con una prioridad distinta.
• Programa: Nombre de la aplicación que se va a ejecutar (Ruta absoluta)
• Argumentos: Argumentos que transferir (tenga en cuenta que rutas de acceso de archivo deben ser rutas de acceso absolutas en el sistema de destino).

psexec \\’IP_REMOTA’ -u ‘USUARIO_ADMINISTRADOR’ -p ‘PASSWORD’ -s COMANDO_QUE_QUERAMOS_EJECUTAR’

EJEMPLOS DE USO :

psexec.exe \\servidor -u dominio\usuario -p password -e d:\reinicio.cmd

En este ejemplo nos conectamos al equipo «servidor» con la cuenta de dominio «usuario» con su password correspondiente y ejecutamos el SCRIPT cmd «reinicio.cmd» el cual se encuentra en la raíz del disco «D».

psexec @\\srvdatos\equipos.txt -u dominio\usuario -p password -n 15 -e cmd /C \\srvdatos\comandos.bat

Aquí lo que estamos haciendo es lanzar el script «comandos.bat» a un listado de equipos que se encuentra en el txt «equipos.txt», como este comando ejecuta comando de forma remota debemos de meter los credenciales para conectarnos a esos equipos, , y por ultimo es recomendable fijar un «time out» de intento por conexión, ya que puede daré el caso que alguno de los equipos de nuestro listado este apagado o tengamos problemas de conectividad, yo le he fijado un «time out» de 15 segundos.

psexec \\pc-administracion -u dominio\usuario -p password -n 15 -e cmd /C xcopy /z /y «\\srvdatos\conf.ini» «C:/program files/»

En este ejemplo mas simple lo que estamos haciendo es conectarnos directamente al un PC llamado «pc-administracion» y le estamos copiando un archivo desde un servidor a local.

Esta entrada fue publicada en BATCH - DOS. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.