PsExec: cómo ejecutar comandos en equipos remotos

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).-uy-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 (-flo copia aunque ya exista y-vsolo 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.-accepteulay-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
LocalAccountTokenFilterPolicypara 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-ise 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
PSEXESVCen el equipo remoto. Elimínalo consc \\equipo delete PSEXESVC. - El comando funciona en tu equipo pero no en el remoto: la ruta del programa debe existir en el remoto. Usa
-cpara 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
PSEXESVCen 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-Commandejecuta 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-01abre una consola remota equivalente apsexec \\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.