General

PsExec: cómo ejecutar comandos en equipos remotos

Portada del artículo «PsExec: cómo ejecutar comandos en equipos remotos» de Trucos Informáticos

PsExec es una de las herramientas más útiles y más conocidas de la administración de sistemas Windows: te permite ejecutar un programa en otro equipo de la red, incluso con una consola interactiva, sin instalar nada en él. Es también una herramienta delicada: los antivirus la marcan con frecuencia porque los atacantes la usan para moverse por una red. En esta guía verás qué es PsExec, de dónde se descarga de forma segura, cómo se usa con ejemplos reales, qué necesita el equipo remoto, cómo resolver los errores habituales y qué alternativas modernas existen.

Qué es PsExec

PsExec forma parte de PsTools, un conjunto de utilidades de línea de comandos de Sysinternals, el grupo de herramientas que hoy mantiene Microsoft. La propia documentación lo describe como un sustituto ligero de Telnet: permite lanzar procesos en otros sistemas, con interactividad completa para las aplicaciones de consola, y sin tener que instalar manualmente un cliente en los equipos remotos. Sus usos más potentes son abrir un símbolo del sistema en un equipo remoto y «activar de forma remota» herramientas como ipconfig, que no pueden mostrar información de otros equipos por sí solas.

Descargar PsExec de forma segura

Descarga PsExec únicamente desde Microsoft. La página oficial es la de Sysinternals en Microsoft Learn (PsExec – Sysinternals), que enlaza al paquete PSTools.zip. También puedes ejecutarlo directamente desde el recurso compartido público de Sysinternals sin descargarlo, o bajar el paquete con PowerShell:

Invoke-WebRequest -Uri 'https://download.sysinternals.com/files/PSTools.zip' -OutFile "$env:TEMP\PSTools.zip"
Expand-Archive "$env:TEMP\PSTools.zip" -DestinationPath 'C:\Tools\PSTools'

# Comprueba que el ejecutable está firmado por Microsoft
Get-AuthenticodeSignature 'C:\Tools\PSTools\PsExec.exe' | Select-Object Status, @{N='Firmante';E={$_.SignerCertificate.Subject}}

Según la documentación, funciona en Windows 8.1 o posterior (clientes) y Windows Server 2012 o posterior. No hace falta instalarlo: basta con copiar PsExec.exe a una carpeta que esté en la ruta de búsqueda (PATH). La primera vez que lo ejecutes aparece la ventana de licencia; para suprimirla en scripts usa -accepteula.

Una advertencia: algunos antivirus lo detectan como «herramienta de administración remota» o como amenaza potencial. Microsoft aclara que PsTools no contiene virus, pero que otros programas maliciosos las han usado, y por eso saltan las alertas. Si tu antivirus lo bloquea, confirma antes que el archivo es el original y que lo necesitas; no desactives la protección sin más.

Sintaxis básica

psexec [\\equipo[,equipo2[,...] | @archivo]] [-u usuario [-p contraseña]] [opciones] programa [argumentos]

Estas son las opciones que más se usan:

  • \\equipo: el equipo donde se ejecuta el programa. Sin nombre, se ejecuta en el equipo local. Con un asterisco (\\*) se ejecuta en todos los equipos del dominio actual: es muy peligroso, no lo uses a la ligera.
  • @archivo: ejecuta el comando en cada equipo listado en un archivo de texto (uno por línea).
  • -u y -p: usuario y contraseña para conectar con el equipo remoto. Si omites -p, PsExec te pide la contraseña de forma oculta.
  • -s: ejecuta el proceso con la cuenta SYSTEM en el equipo remoto.
  • -i: hace que el programa interactúe con el escritorio de la sesión indicada (si no indicas sesión, la de consola). La documentación señala que es obligatorio para ejecutar aplicaciones de consola de forma interactiva con entrada y salida redirigidas.
  • -d: no espera a que termine el proceso (no interactivo).
  • -h: si el sistema remoto es Vista o posterior, ejecuta el proceso con el token elevado de la cuenta, si lo tiene.
  • -c: copia el ejecutable indicado al equipo remoto para ejecutarlo (-f lo copia aunque ya exista y -v solo si es más reciente).
  • -w: directorio de trabajo del proceso.
  • -n: tiempo máximo, en segundos, para conectar con los equipos remotos.
  • -e: no carga el perfil de la cuenta. -l: ejecuta el proceso como usuario limitado.
  • -accepteula y -nobanner: suprimen la licencia y el encabezado.

Ejemplos prácticos

# Abrir una consola interactiva en un equipo remoto
psexec \\PC-CONTA-01 cmd

# Ejecutar un comando y ver el resultado aquí
psexec \\PC-CONTA-01 ipconfig /all

# Como el usuario de dominio indicado (te pedirá la contraseña)
psexec \\PC-CONTA-01 -u EMPRESA\admin.soporte cmd

# Copiar un programa al equipo remoto y ejecutarlo
psexec \\PC-CONTA-01 -c C:\Tools\herramienta.exe

# Ejecutar el mismo comando en varios equipos
psexec @C:\Listas\equipos.txt -s ipconfig /flushdns

# Abrir una consola como SYSTEM en este mismo equipo
psexec -i -s cmd

# Abrir el Editor del Registro como SYSTEM (para ver claves protegidas como SAM o SECURITY)
psexec -i -d -s C:\Windows\regedit.exe

Si el nombre del programa tiene espacios, enciérralo entre comillas, y recuerda que las rutas de los argumentos deben ser absolutas y válidas en el equipo remoto. El valor que devuelve PsExec es el código de salida del programa que ejecutas, no uno propio.

Credenciales: qué cuenta se usa y qué puedes hacer en la red

Este detalle genera muchas confusiones. Si no indicas usuario, el proceso se ejecuta con tu cuenta en el equipo remoto, pero sin acceso a recursos de red, porque se está «suplantando» tu identidad (no es un inicio de sesión completo). Si el proceso remoto necesita acceder a una carpeta compartida o a otro servidor, debes indicar un usuario válido con la sintaxis Dominio\Usuario.

En cuanto a la seguridad de la contraseña, la documentación actual indica que la contraseña y el comando se cifran en el trayecto hacia el equipo remoto. Aun así, evita escribir la contraseña en la línea de comandos con -p: queda en el historial de la consola, en los registros de creación de procesos y en la lista de procesos visible para otros usuarios. Omite -p y deja que PsExec te la pida de forma oculta.

Requisitos en el equipo remoto

  • Permisos de administrador en el equipo remoto con las credenciales que uses.
  • Acceso por SMB (TCP 445) y el recurso administrativo ADMIN$ disponible. PsExec copia un servicio temporal (PSEXESVC) en ese recurso, lo inicia y se comunica con él por una canalización con nombre.
  • Compartir archivos e impresoras permitido en el cortafuegos de Windows para la red desde la que te conectas.
  • Equipos fuera de dominio y cuentas locales: la restricción de UAC remota impide usar cuentas de administrador locales (que no sean el Administrador integrado) para tareas administrativas remotas. Existe el valor de registro LocalAccountTokenFilterPolicy para relajarla, pero reduce la seguridad; en equipos de dominio, usa una cuenta de dominio y evítalo.

Solución de problemas

  • «Acceso denegado»: la cuenta no es administrador del equipo remoto, o hay restricciones de UAC remotas con cuentas locales. Prueba con una cuenta de dominio con permisos.
  • «No se encontró la ruta de red» o no conecta: el nombre no se resuelve (comprueba DNS), el equipo está apagado o el puerto 445 está bloqueado. Verifícalo con Test-NetConnection PC-CONTA-01 -Port 445.
  • El programa no muestra salida o se queda colgado: las aplicaciones de consola interactivas necesitan la opción -i. Las aplicaciones gráficas que no uses con -i se ejecutan en una sesión no interactiva y no se ven.
  • «No se pudo iniciar el servicio» o el servicio queda instalado: si interrumpes PsExec con fuerza, puede quedar el servicio PSEXESVC en el equipo remoto. Elimínalo con sc \\equipo delete PSEXESVC.
  • El comando funciona en tu equipo pero no en el remoto: la ruta del programa debe existir en el remoto. Usa -c para copiarlo o rutas absolutas válidas allí.

Seguridad: por qué PsExec preocupa a los equipos de defensa

Precisamente porque es potente y está firmado por Microsoft, los atacantes la emplean para el movimiento lateral: una vez que tienen credenciales de administrador, ejecutan código en otros equipos con ella. Por eso conviene saber qué huella deja y cómo limitarla:

  • Su uso crea un servicio llamado PSEXESVC en el equipo remoto, lo que genera eventos de instalación de servicio (por ejemplo, el evento 7045 del registro del sistema y el 4697 del de seguridad). Es una señal fácil de vigilar.
  • Limita desde qué equipos se puede administrar de forma remota y quién tiene derechos de administrador local. Siguiendo el mismo principio que explicamos en la guía para proteger el Escritorio Remoto (RDP) en Windows Server, usa estaciones de administración dedicadas.
  • Microsoft Defender para punto de conexión incluye una regla de reducción de la superficie de ataque llamada Bloquear creaciones de procesos procedentes de comandos PSExec y WMI. Valora activarla si no usas PsExec en tu entorno.
  • Nunca dejes la herramienta copiada en equipos de usuarios sin necesidad.

Alternativas modernas a PsExec

Hoy hay formas más integradas y más fáciles de controlar para ejecutar comandos de forma remota:

  • PowerShell remoto: Invoke-Command ejecuta un bloque de código en uno o muchos equipos a la vez, con autenticación Kerberos, cifrado y registros más fáciles de auditar. Lo explicamos con ejemplos en los 10 comandos de PowerShell imprescindibles.
  • Sesiones interactivas: Enter-PSSession -ComputerName PC-CONTA-01 abre una consola remota equivalente a psexec \\equipo cmd.
  • Tareas programadas remotas: para ejecutar algo en una hora concreta, consulta la guía de tareas programadas con PowerShell, que también permite registrarlas en equipos remotos.
  • Herramientas de gestión: Intune, ConfigMgr, Ansible u otros sistemas de automatización, que centralizan permisos y registros.

Si necesitas ejecutar el mismo comando en muchos equipos, combina PowerShell remoto con un bucle sobre la lista: tienes ejemplos en la guía de bucles en PowerShell.

Cuándo sí sigue siendo útil PsExec

  • Para ejecutar algo como SYSTEM de forma puntual (psexec -i -s cmd), muy práctico para diagnosticar permisos o claves de registro protegidas.
  • En equipos donde no está habilitado PowerShell remoto y tienes acceso administrativo por SMB.
  • En scripts heredados que ya lo usan.

Preguntas frecuentes

¿PsExec es un virus?

No. Es una herramienta legítima de Microsoft Sysinternals. Los antivirus la señalan porque el malware la ha utilizado. Descárgala siempre de Microsoft y comprueba su firma.

¿Puedo ejecutarlo contra un equipo que no está en mi dominio?

Sí, si hay conectividad por SMB y dispones de credenciales de administrador válidas en ese equipo; recuerda las limitaciones de UAC con cuentas locales. Indica el usuario con -u NOMBREEQUIPO\usuario.

¿Cómo evito que me pida el contrato de licencia?

Añade -accepteula a la primera ejecución, o acepta el cuadro una vez en cada equipo desde el que lo uses.

Conclusión

PsExec sigue siendo una navaja suiza para ejecutar procesos en equipos remotos o como SYSTEM, pero hay que usarlo con cabeza: descárgalo solo de Microsoft, no pongas la contraseña en la línea de comandos, limita quién puede usarlo y vigila los eventos que deja. Para el trabajo habitual, PowerShell remoto es la opción más segura, flexible y auditable.

Guías relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *