Si hubiera una utilidad de línea de comandos que pudiera competir con robocopy en términos de utilidad, es PsExec. La utilidad PsExec de Sysinternals es tan ubicua como viene en un arsenal de administración de ti. Esta herramienta permite a los administradores ejecutar comandos de forma remota como si estuvieran en el equipo local.

para cubrir la herramienta PsExec en profundidad, era apropiado cubrir esta codiciada herramienta en una guía definitiva de ata. En esta guía, aprenderás qué es psexec, de qué es capaz de muchos ejemplos de cómo usar esta útil herramienta.,

Tabla de Contenidos

¿Qué es PsExec.exe?

si es nuevo en él o tal vez no ha tenido la necesidad de ejecutar comandos y herramientas en equipos remotos, es posible que no sepa qué es psexec.

PsExec o psexec.exe es una utilidad de línea de comandos creada para Windows. Permite a los administradores ejecutar programas en equipos locales y, más comúnmente, remotos. Es una parte de utilidad gratuita de la suite Sysinternals PsTools construida por Mark Russinovich hace muchos años.,

se creó para reemplazar herramientas como telnet que le obligaban a abrir puertos e introducir vulnerabilidades de seguridad. Hoy en día, tenemos otras opciones como PowerShell Remoting y el cmdlet Invoke-Command PowerShell, pero PsExec todavía tiene su lugar.

PsExec permite una interactividad completa para la aplicación de consola sin tener que instalar ningún software. Como verás a través de esta guía definitiva, PsExec puede lanzar mensajes de comandos interactivos, Ejecutar como sistema local en equipos remotos, ejecutar comandos en varios equipos a la vez y más.,

es compatible con todas las versiones de Windows desde Windows XP. Eso significa, que sí, PsExec en Windows 10 es una cosa también. Es una herramienta simple de ejecutar que funciona en casi todo, pero no confunda su simplicidad con sus capacidades!

requisitos previos

simplemente necesita ejecutar un sistema operativo Windows moderno para que PsExec se ejecute en su computadora local. Sin embargo, vas a querer ejecutar psexec contra equipos remotos. Para hacer eso, deberá asegurarse de que algunos elementos estén en su lugar.

si no tiene estos elementos en su lugar ahora o no está seguro, no se preocupe., En la siguiente sección, veremos cómo escribir PowerShell para probar sus equipos remotos.

  • Una computadora moderna con Windows (local)
  • intercambio de archivos e impresoras abierto (computadora remota, puerto TCP 445)
  • El recurso compartido admin available administrative disponible (computadora remota)
  • Usted conoce la credencial de una cuenta local (computadora remota)

al momento de escribir este artículo, PsExec está en la versión 2.2 y será la versión que aprenderá en este artículo.,

instalación de PSexec (con configuración remota del equipo)

técnicamente, no se instala PsExec ya que es solo una utilidad de línea de comandos, pero lo suficientemente cerca. Dado que no es necesaria la instalación, simplemente necesita descargarlo y extraerlo del archivo zip de PsTools. PsExec no está disponible como una utilidad independiente y es parte del conjunto de herramientas PsTools.

descargar PSExec

puede extraer el archivo ZIP manualmente o aquí hay un práctico fragmento de PowerShell para descargar y extraer PsExec de su archivo ZIP pstools. Tenga en cuenta que esto elimina todas las otras herramientas de PsTools., Muchos son todavía útiles, pero no vamos a cubrir los en este artículo.

Configuración Remota del equipo

Una vez que haya descargado PsExec, deberá asegurarse de que cualquier equipo remoto en el que vaya a ejecutarlo esté abierto. PsExec tiene requisitos simples; el uso compartido de archivos e impresoras habilitado y el recurso compartido admin administrative administrative disponible.

Puede ir a todos los equipos remotos, abrir el applet de Firewall de Windows, ir a aplicaciones permitidas y habilitar el uso compartido de archivos e impresoras en todos los equipos como se ve a continuación.,

tenga en cuenta que el uso compartido de archivos e impresoras es un riesgo de seguridad conocido, así que asegúrese de que solo esté habilitado el perfil de firewall privado.

que Permite Compartir Archivos e impresoras en el Firewall de Windows

O usted puede visitar cada equipo y ejecute el comando netsh utilidad para abrirlo a través de:

> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes

O usted podría utilizar PowerShell Set-NetFirewallRule cmdlet para hacerlo.,

PS51> Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private

si prefiere no visitar cada equipo, tiene disponible la comunicación remota de PowerShell y está en un dominio de Active Directory, también puede abrir el firewall en muchos equipos a la vez con el cmdlet Invoke-Command.

usando PsExec

antes de poder correr, necesitas caminar. Si nunca has usado PsExec antes, ¡te espera una delicia! Asegúrese de leer esta sección primero para mojarse los pies para aprender los conceptos básicos antes de saltar en el extremo profundo más adelante en este artículo.,

la primera vez que ejecute PsExec en un nuevo sistema, verá inmediatamente que aparece el Acuerdo de licencia de PsExec. Tendrás que hacer clic en el botón Aceptar para comenzar a usarlo.

PSExec license agreement (EULA)

Si desea evitar que se muestre el Acuerdo de licencia, puede aceptarlo silenciosamente utilizando el interruptor/accepteula como se muestra a continuación.,

> psexec /accepteula

aprenderá algunos trucos para silenciar esta ventana emergente de CLUF en equipos locales y remotos más adelante en el artículo.

encontrar ayuda

al explorar PsExec, no debe usar ningún interruptor en absoluto. Cuando simplemente ejecuta psexec sin interruptores, devolverá todas las opciones y una breve explicación de lo que hace cada uno. Todas las opciones están en la siguiente tabla para su conveniencia.,

Cambiar Explicación
-a Separar los procesadores en los que se puede ejecutar la aplicación con comas, donde 1 es el número más bajo de la CPU. Por ejemplo, para ejecutar la aplicación en CPU 2 y CPU 4, Ingrese:» – a 2,4 »
– c Copie el programa especificado en el sistema remoto para su ejecución. Si omite esta opción, la aplicación debe estar en la ruta del sistema en el sistema remoto.,
-d no espere a que el proceso para terminar (no interactivo).
-e no carga el perfil de cuenta especificado.
-f Copiar el programa especificado, incluso si el archivo ya existe en el sistema remoto.
-i Ejecutar el programa para que interactúe con el escritorio de la sesión especificada en el sistema remoto. Si no se especifica ninguna sesión, el proceso se ejecuta en la sesión de consola. Algunos han reportado mejores resultados siempre usando el interruptor-s con-i debido a que windows es ininteligible.,
-h si el sistema de destino es Vista o superior, tiene el proceso proc
-l Ejecutar como usuario limitado (elimina el grupo Administradores y solo permite privilegios asignados al grupo Usuarios). En Windows Vista el proceso se ejecuta con poca integridad.
– n especifica el tiempo de espera en segundos para conectarse a equipos remotos.
-p Especifica la contraseña opcional para el nombre de usuario. Si omite esto, se le pedirá que introduzca una contraseña oculta.,
-r Especifica el nombre del servicio remoto para crear o interactuar. con.
– s ejecute el proceso remoto en la cuenta del sistema.
– u especifica el nombre de usuario opcional para iniciar sesión en el equipo.
– V Copie el archivo especificado solo si tiene un número de versión más alto o es más reciente que el del sistema remoto.
– w establecer el directorio de trabajo del proceso (relativo
– x mostrar la interfaz de usuario en el escritorio seguro de Winlogon (solo sistema local).,
– arm especifica que el equipo remoto es de arquitectura ARM.
– priority especifica-low, -belownormal, -abovenormal, -high o
-realtime ejecute el proceso con una prioridad diferente. Use
– background ejecutar con poca memoria y prioridad de E/s en Vista.
computer Direct PsExec para ejecutar la aplicación en el equipo o equipos especificados., Si omite el nombre del equipo PsExec ejecuta la aplicación en el sistema local y si especifica un comodín ( \ * ), PsExec ejecuta
@file PsExec ejecutará el comando en cada uno de los equipos enumerados en el archivo.
– accepteula este indicador suprime la visualización del diálogo de licencia.
-nobanner no mostrar la pancarta de inicio y el mensaje de copyright.,

ejecutar un comando remoto simple

en su forma más básica, PsExec requiere dos parámetros: un nombre de equipo y un comando para ejecutar. Si tiene un comando para ejecutar en el equipo remoto que no requiere ningún argumento como hostname, simplemente puede agregarlo después del nombre del equipo.

tenga en cuenta que si no especifica una ruta de archivo completa, el comando a ejecutar debe estar en la ruta de usuario o del sistema., Además, si tienes un programa con espacios en el nombre, siempre puedes encerrarlo en espacios como » mi aplicación.exe».

> psexec \\REMOTECOMPUTER hostname

puede ver a continuación que para ejecutar el comando hostname en el equipo CONTOSODC1, define su ruta UNC seguida por el comando. PSExec se conectará al equipo remoto de forma segura, ejecutará el comando y devolverá la salida. En este caso, el comando hostname devolvió el nombre de host del equipo que es CONTOSODC1.,

si el comando no es cmd u otra consola, PsExec saldrá rápidamente de la sesión remota y devolverá el código de salida devuelto por el proceso remoto.

Nota: El código de error o de salida devuelto por psexec no proviene de PsExec en sí. En su lugar, proviene del comando que psexec ejecutó en el equipo remoto.,

Successful psexec remote command execution

How PsExec Works on Remote Computers

PsExec goes through a few steps to execute programs on remote computers.

  1. Create a PSEXESVC.exe file in C:\Windows.
  2. Create and start a Windows service on the remote computer called PsExec.
  3. Execute the program under a parent process of psexesvc.exe.
  4. When complete, the PsExec Windows service will be stopped and removed.,

Cuando el proceso no funciona 100% correctamente, es posible que tenga que eliminar manualmente el servicio utilizando el comando sc.

ejecutar un comando local simple

aunque PsExec es mejor conocido por ejecutar comandos en equipos remotos, también puede ejecutar comandos localmente.

Puede ejecutar comandos localmente simplemente no proporcionando un nombre de equipo como el siguiente.

> psexec <local command or EXE file>

¿por Qué hacer esto? Una razón sería ejecutar comandos como la cuenta del sistema local., Puede usar el conmutador -s para ejecutar cualquier comando como sistema de forma local o remota, como aprenderá más adelante.

echa un vistazo al video corto a continuación. Observe que simplemente necesita proporcionar el conmutador -s junto con el ejecutable intérprete de órdenes para psexec para iniciar una nueva sesión de órdenes como NT AUTHORITY\SYSTEM.,

ejecutando Psexec como sistema

comandos PsExec (cada vez más avanzados)

los fundamentos abajo, usted puede entonces comenzar a aprender técnicas más avanzadas en psexec. PsExec puede hacer mucho más que ejecutar un solo comando en un solo equipo.

ejecutar comandos en varios equipos

PsExec no se limita a ejecutar comandos en un equipo remoto a la vez., Esta herramienta también tiene soporte para copiar programas y ejecutar comandos en varios equipos a la vez.

Puede ejecutar PsExec en varios equipos a la vez de varias maneras diferentes.

nombres de equipo separados por comas

normalmente cuando se ejecuta un comando en un solo equipo remoto, se especificará un solo nombre de equipo como \\REMOTECOMPUTER. También puede especificar varios equipos separados por comas como se muestra a continuación.,

> psexec \\REMOTECOMPUTER1,REMOTECOMPUTER2,REMOTECOMPUTER3

todos los equipos de un dominio de Active Directory

Si ejecuta PsExec en un equipo unido a un dominio de Active Directory y desea eliminar una ejecución de comando en todos los equipos de ese dominio, utilice un comodín.

PsExec buscará en todo el dominio de Active Directory e intentará ejecutar un comando en cada equipo. A continuación se muestra una sintaxis de ejemplo sobre cómo PsExec intentará conectarse a cada equipo en el dominio del que forma parte el equipo ejecutante y ejecutará el comando hostname.,

tenga en cuenta que si utiliza un asterisco para encontrar todos los equipos en un dominio mientras el equipo local es parte de un grupo de trabajo, recibirá el error A system error has occurred: 6118.

El uso de un comodín obliga a PsExec a ejecutar esencialmente el comando net view /all para buscar primero todos los equipos en el dominio. Esta es una forma obsoleta de encontrar información de la computadora debido a su dependencia de NetBIOS.

lectura de un archivo

otra forma de ejecutar comandos en varios equipos a la vez es utilizar un archivo de texto., Usando la sintaxis @<filename.txt>, PsExec leerá cada línea en el archivo de texto como si fuera un nombre de equipo. Luego procesará cada computadora individualmente.

a continuación puede ver un ejemplo de uso de PowerShell para crear un archivo de texto con nombres de equipo delimitados por líneas y usarlo como entrada para psexec.

PS51> (Get-AdComputer -Filter *).Name | Out-File computers.txtPS51> psexec @computers.txt hostname

copiando programas locales en el equipo remoto

Usando el conmutador-c, psexec copiará cualquier programa local en el equipo remoto antes de la ejecución.,

tal vez tenga un EXE en su computadora local en un C:\Tools carpeta y le gustaría ejecutarlo en un equipo remoto. Puede hacerlo utilizando la siguiente sintaxis:

> psexec \\REMOTECOMPUTER -c C:\Tools\program.exe

Cuando utilice el conmutador -c y no especifique un archivo ejecutable, PsExec seguirá copiando el archivo, pero recibirá un error que indica que el sistema no puede encontrar el archivo especificado. Esto sucede porque PsExec siempre intentará ejecutar el archivo que copies.,

si necesita copiar archivos en equipos remotos antes de usar PsExec, utilice el cmdlet Copy-Item PowerShell en su lugar.

ejecutar procesos remotos bajo credenciales alternativas

otro caso de uso popular de PsExec es ejecutar comandos bajo cuentas alternativas. De forma predeterminada, PsExec intentará conectarse al equipo remoto en su cuenta que ha iniciado sesión actualmente. Más específicamente, se hará pasar por su cuenta en el equipo remoto.,

Usando el interruptor -uy opcional -p le permite conectarse al equipo remoto con una cuenta de usuario alternativa. PsExec cifrará el nombre de usuario y la contraseña y los enviará al equipo remoto para la autenticación.

por ejemplo, si está en un grupo de trabajo, siempre tendrá que especificar el nombre de usuario para autenticarse en el equipo remoto como.

> psexec \\REMOTECOMPUTER hostname -u localadmin -p $$word

si ambos equipos son miembros de Active Directory, asegúrese de introducir el nombre de dominio en el prefacio de la cuenta de usuario.,

> psexec \\REMOTECOMPUTER hostname -u contoso.local\domainadmin -p $$word

tenga en cuenta que cuando no utiliza el conmutador -u, psexec suplanta su cuenta iniciada en el equipo remoto. No tendrá acceso a ningún recurso de red.

ejecutar procesos como la cuenta del sistema local

Una de las características más útiles de ejecutar PsExec bajo una cuenta alternativa es usar el interruptor-s. Este conmutador permite que PsExec (y su aplicación ejecutada remotamente) se ejecute bajo la cuenta del sistema local del equipo remoto (o local).,

aviso a continuación no he incluido un nombre de equipo remoto. PsExec también se ejecutará con mucho gusto en el equipo local. En este caso, Estoy usando la opción -s para decirle a PsExec que inicie un símbolo del sistema local como cuenta del sistema LOCAL.,

Ejecutar psexec como sistema LOCAL

para ejecutar un símbolo del sistema como sistema LOCAL en un equipo remoto, agregue el nombre del equipo a la referencia como se muestra a continuación:

> psexec -s \\REMOTECOMPUTER cmd

lanzar aplicaciones GUI de forma remota

otro switch PsExec útil es-i. De forma predeterminada, PsExec no permite que el comando ejecutado remotamente muestre ninguna ventana en el equipo remoto., Esto es útil porque si está ejecutando comandos de forma remota, no verá la pantalla de todos modos.

pero tal vez necesite traer programas para sus usuarios. Usted personalmente no va a utilizar la aplicación, pero un usuario final lo hará. En ese caso, utilice el interruptor -i.

tal vez necesite abrir una ventana de bloc de notas en un equipo remoto. No hay problema. Ejecuta el Bloc de notas.exe con el interruptor -i y PsExec abrirá el Bloc de notas.,

> psexec -i \\REMOTECOMPUTER notepad
Ejecución de psexec en modo interactivo

asegúrese de usar también el -d interruptor para que se desconecte cuando la ventana interactiva es llevado bien. De forma predeterminada, PsExec esperará a que se complete el proceso que ejecutó. Si el proceso remoto (Bloc de notas en este caso) se mantiene en ejecución, PsExec nunca devolverá el control.,

Usando el interruptor-d con -i le dirá a PsExec que no espere a que finalice el proceso remoto. En su lugar, se desconectará y le devolverá el control tan pronto como se ejecute el proceso remoto.

redirigir la salida

Psexec confiará en cualquier salida enviada desde el proceso remoto a su sesión local. Normalmente, esta salida irá directamente a su consola local. Pero si desea redirigirlo, puede hacerlo utilizando los operadores de redirección típicos.,

por ejemplo, si desea ejecutar un comando y silenciar toda la salida, puede redirigir la salida y los errores a null usando ^> nul ^2^&1.

tenga en cuenta que los caracteres especiales se escapan con un sombrero. (^).

casos de uso de PsExec

Una vez que haya aprendido a usar psexec, inevitablemente encontrará varios casos de uso específicos. En esta sección, aprenderás algunos casos de uso del mundo real y ejemplos usando psexec.,

iniciar un símbolo del sistema remoto (psexec cmd)

uno de los casos de uso más comunes es iniciar PsExec como un símbolo del sistema interactivo. PsExec no solo ejecuta comandos de forma remota. También puede enviar la salida de comandos a su consola. Debido a esto, puede hacer un gran reemplazo de telnet (si alguien todavía lo usa) o tal vez PowerShell Enter-PSSession.

para iniciar un comando remoto, especifique el nombre del equipo remoto y ejecute la aplicación cmd. Cmd es el intérprete de comandos de Windows., Dado que PsExec admite el uso interactivo, con mucho gusto devolverá un cursor intermitente y un mensaje.

> psexec \\REMOTEPC cmd
Abrir la línea de comandos en un equipo remoto

En este punto, el mundo es su ostra. Puede ejecutar comandos en su equipo local a través de este símbolo del sistema «anidado» y se ejecutarán en el equipo remoto.

para salir del símbolo del sistema, escriba exit., PsExec detendrá el proceso cmd en el equipo remoto y devolverá el foco al equipo local.

no utilice Ctrl-C para cerrar una sesión cmd interactiva. Utilice siempre exit. Si usa Ctrl-C, la sesión de psexec seguirá ejecutándose en el equipo remoto.

instalar software de forma remota

puede usar PsExec como una herramienta de implementación de software para pobres. Tal vez tenga un instalador MSI que necesita ejecutar en uno o más equipos remotos llamado setup.msi., Este instalador debe copiarse en los equipos remotos y luego ejecutarse con el msiexec.utilidad exe con unos pocos interruptores.

a continuación se muestra un ejemplo de cómo podría usar PsExec para implementar software de forma remota. Este ejemplo copia la configuración.msi al equipo remoto a continuación, inicia el instalador MSI de forma interactiva en como la cuenta del sistema.

> psexec.exe \\REMOTECOMPUTER –i –s "msiexec.exe /i setup.msi" -c setup.msi

aceptar el CLUF sin el interruptor/accepteula

como se mencionó anteriormente, la primera vez que se ejecute PsExec, tendrá que aceptar un CLUF., Puede usar el interruptor /accepteula pero también puede «escenificarlo» en el registro.

Cuando se inicia por primera vez, PsExec crea una clave de registro en HKCU\Software\Sysinternals\PsExec. En lugar de esa clave de registro, crea un valor de registro llamado EulaAccepted con un valor DWORD de 1.

Usando su método favorito para modificar el registro en equipos remotos, simplemente necesita crear esta clave / valor en equipos en los que desea ejecutar PsExec. Una vez creado, no es necesario ejecutar /accepteula!,

combinando PowerShell y PsExec

antes de PowerShell, todo lo que teníamos era PsExec. Ahora, tenemos opciones. PowerShell puede reemplazar PsExec en muchas situaciones, pero complementarlo en otras.

creación de nombres de equipos con PowerShell

en lugar de usar \\* para buscar todos los equipos en el dominio, puede usar PowerShell en su lugar. Al usar PowerShell, no solo puede seleccionar ciertos equipos, sino que no tiene que usar el comportamiento net view /all propenso al firewall.,

Puede Usar PowerShell para crear una cadena que contenga todos los nombres de equipo separados por una coma. Luego puede pasar esa cadena a PsExec, que procesará alegremente cada una como la escribió manualmente.

Puede ver a continuación un ejemplo de uso de la parte del cmdlet Get-AdComputer del módulo ActiveDirectory PowerShell.

PS51> psexec "\\$((Get-AdComputer -Filter *).Name -join ',')" hostname

habilitar la comunicación remota de PowerShell de forma remota

Si tiene equipos remotos con los que prefiere usar la comunicación remota de PowerShell en lugar de PsExec, puede usar PsExec para habilitarlos.,

ejecutando Enable-PSRemoting o el winrm.en equipos remotos, puede activar rápidamente la comunicación remota de PowerShell en muchos equipos a la vez.

a continuación puede ver un ejemplo de llamada a winrm.archivo por lotes cmd en un equipo remoto que se ejecuta como cuenta del sistema. Debido a que la salida de ese comando no es necesaria, se silencia con 2>&1> $null.

$computerName = 'REMOTECOMPUTER'psexec "\\$Computername" -s c:\windows\system32\winrm.cmd quickconfig -quiet 2&>&1> $null 

mensajes de Error de PsExec

vale la pena mencionar de nuevo por adelantado que la mayoría de los códigos de error que se ven devueltos desde PsExec son del proceso remoto; no de PsExec., Pero es útil tener una comprensión de estos códigos de error y lo que podrían significar.

si desea una referencia sobre todos los códigos de error de Windows, le recomiendo revisar esta lista exhaustiva de códigos de error de Windows.

a continuación se muestra una lista de códigos de error comunes que puede ver devueltos por PsExec.

Código de Error Explicación
-2146232576 Normalmente devueltos por Windows Update cuando se produce un error.,
0 Comando se ejecutó correctamente
1 función Incorrecta. Ocurrió un problema. Eso es todo.
1603 error grave durante la instalación. Esto normalmente es devuelto por msiexec.
2 El sistema no puede encontrar el archivo especificado
4 El sistema no puede abrir el archivo.
5 Acceso denegado.
6 El identificador no es válido.,
6118 La lista de servidores de este grupo de trabajo no están disponibles

Sus Comentarios