los PsExec La herramienta le permite ejecutar programas y procesos en computadoras remotas y usar todas las funciones de la interfaz interactiva de las aplicaciones de la consola (no necesita instalar manualmente el software del cliente). La principal ventaja de PsExec es la capacidad de invocar la interfaz de línea de comandos interactiva en computadoras remotas, ejecutar programas de forma remota y ejecutar cualquier comando (en segundo plano o en modo interactivo).

La utilidad PsExec es uno de los programas más populares del paquete PsTools de Sysinternals. Puedes descargarlo en esta página (la versión actual es PsExec v2.34).

Para usar la herramienta PsExec, simplemente cópielo en la carpeta de su computadora (conviene copiarlo en la carpeta ejecutable predeterminada C:WindowsSystem32), y ejecútelo desde el símbolo del sistema o la consola de PowerShell.

¿Cómo funciona PsExec?

En los recursos del archivo ejecutable PsExec.exe, hay otro archivo ejecutable: PSEXESVC, que es un archivo de servicio de Windows. Al establecer una conexión con una computadora remota, la utilidad PsExec copia este archivo en la carpeta administrativa oculta Admin$ de la computadora remota (C:WindowsSystem32psexesvc.exe). Para que PsExec se conecte a una computadora remota, el Servidor Lanman y Estación de trabajo Lanman los servicios deben estar ejecutándose en una computadora. El puerto SMB (TCP/445) y los puertos UDP/137 deben abrirse en los firewalls entre las computadoras de origen y de destino.

Luego, PsExec instala e inicia el servicio PSEXESVC utilizando las funciones de la API de Windows para administrar servicios. Después de ejecutar PSEXESVC, se establece una conexión para la transferencia de datos entre este servicio y el proceso PsExec en su computadora. Cuando se completa el trabajo, PsExec detiene el servicio y lo elimina automáticamente de la computadora remota.

Uso de PsExec para ejecutar comandos en una computadora remota

La sintaxis para PsExec es la siguiente:

psexec \RemotePCName [-u username[-p password]] command [arguments]

Si no especificó el nombre de usuario y la contraseña, el proceso remoto se inicia en la computadora remota con sus credenciales actuales, que se utilizan para iniciar el proceso PsExec en su computadora. Si necesita ejecutar comandos en una computadora remota con una cuenta de usuario diferente, tenga en cuenta que la contraseña se envía a través de la red al sistema remoto en texto sin formato.

Cuando inicia PsExec por primera vez, debe aceptar el Acuerdo de licencia de Sysinternals.

Como ejemplo, queremos purgar el caché de DNS en la computadora remota lon-srv01. Ejecute el comando:

psexec \lon-srv01 ipconfig /flushdns

mando a distancia psexec

El comando se ejecutará en la computadora lon-srv01 con sus credenciales. Después de que finalice ipconfig, toda la salida de texto se transferirá a su computadora y también se devolverá el código de error. Si el comando fue exitoso, verá el código de salida 0.

Para reiniciar la computadora remota, ejecute el siguiente comando:

psexec \lon-srv01 "cmd.exe" "/c shutdown /f /r/ /t 60"

Si necesita ejecutar varios comandos uno por uno, es mejor ejecutar PsExec en el modo interactivo en la computadora remota. Para hacer esto, ejecute el comando:

psexec \lon-srv01 cmd

Ahora todos los comandos que escribió en el símbolo del sistema en su computadora local, se ejecutarán en la computadora remota lon-srv01.

psexec ejecutar como administrador

Para conectarse a una computadora remota con una cuenta específica y ejecutar un shell interactivo, use el siguiente comando:

psexec.exe \lon-srv01 -u user -p password cmd.exe

Puede usar PsExec incluso para ejecutar comandos de PowerShell de forma remota. Por ejemplo, el siguiente comando le devolverá el tamaño del directorio C:PS en la computadora remota:

psexec \lon-srv01 powershell -ExecutionPolicy RemoteSigned -command "'{0:N2}' -f ((gci C:PS | measure Length -Sum).Sum/1MB)"

Nota. Para ejecutar un comando de forma remota en PowerShell, puede usar el cmdlet Invoke-Command en lugar de PsExec.

Puede usar el parámetro -c para especificar el nombre del archivo local que desea copiar a la computadora remota y ejecutarlo allí. Por ejemplo:

psexec \lon-srv01 -c c:psmyapp.exe

Puede usar PsExec como la forma más fácil de instalar software de forma remota. Por ejemplo, tiene un archivo de instalación de cierto programa (por ejemplo, setup.msi). Para copiar el archivo msi a una computadora remota e instalarlo, use la siguiente línea:

psexec.exe \lon-srv01 -c setup.msi –i –s "msiexec.exe /i setup.msi"

De forma predeterminada, PsExec no permite iniciar un programa GUI en el escritorio del usuario remoto. PsExec ejecuta comandos en modo oculto (no notará ninguna ventana o cuadro de diálogo en la computadora remota donde se ejecutan los comandos). Sin embargo, puede cambiar esto con la opción -i.

Por ejemplo, el siguiente comando PsExec abrirá el proceso notepad.exe en la computadora remota y lo mostrará en el escritorio del usuario local:

psexec -i \lon-srv01 notepad

PsExec esperará a que se complete un proceso que se ejecuta en una computadora remota. Si los usuarios remotos no cierran las ventanas del bloc de notas en su escritorio, su proceso de PsExec esperará indefinidamente hasta que se complete. Para evitar que PsExec espere a que finalice el proceso remoto, use el modificador -d:

psexec -i -d \lon-srv01 notepad

Se puede obtener información completa sobre todos los parámetros de PsExec simplemente ingresando el comando psexec en la línea de comando sin parámetros.

psexec

Para finalizar una sesión remota de PsExec, escriba exit y presione Enter.

Uso de PsExec para ejecutar procesos como la cuenta del SISTEMA LOCAL

PsExec tiene una característica interesante y útil. Si no especifica un nombre de computadora, el comando se ejecutará desde la autoridad del sistema local de manera predeterminada. Puede ejecutar programas bajo la cuenta SYSTEM usando el modificador -s. Por ejemplo, ejecute la sesión CLI:

psexec -s cmd

Luego verifique con qué usuario está conectado actualmente con el quién soy mando. Como puede ver, la consola se inicia desde la cuenta NTAuthoritySystem.

control remoto psexec cmd

Ejecución de comandos en varias computadoras remotas con PsExec

PsExec le permite ejecutar el comando simultáneamente en varias computadoras remotas. Para hacer esto, puede configurar los nombres de las computadoras separados por comas: psexec PC1,PC2 "ipconfig /todos" o guárdelos en un archivo de texto y luego especifique una ruta a este archivo: psexec @c:pscomputer_list.txt ipconfig. Si en vez del nombre del equipo le pones un asterisco (psexec*), entonces el comando se ejecutará en todas las computadoras de su dominio (puede usar este truco solo en una computadora unida al dominio).

Por ejemplo, el siguiente comando copiará su correr.bat archivo a todas las computadoras enumeradas en el archivo de texto c:pscomputer_list.txt, y ejecute este lote (el argumento –h se usa para ejecutar lote elevado):

PsExec.exe @c:pscomputer_list.txt -h -u .administrator -p $upper0P@$ -c "c:psrun.bat"

Ejecutar CMD en una computadora remota como administrador usando PsExec

Cuando ejecuta cmd.exe de forma interactiva a través de PsExec con un usuario remoto, no tiene forma de elevar los privilegios (como administrador) cuando el UAC está habilitado. Para ejecutar los comandos con el token elevado de la cuenta, use la opción –h. Esta opción significa que todos los comandos se ejecutarán en el modo "Ejecutar como administrador".

Errores de PsExec

Error de acceso denegado a PsExec

En algunos casos, puede obtener el siguiente error al intentar conectar una computadora remota mediante PsExec:

No se pudo acceder al nombre de la computadora

La ruta de red no se encontró

Asegúrese de que el porcentaje de administración predeterminado esté habilitado en el nombre de la computadora.

computadora remota psexec

Asegúrese de que se pueda acceder a la computadora remota a través de la red a través de SMB (puerto TCP 445). Puede probar la conexión a la computadora remota usando el siguiente comando de PowerShell:

Test-NetConnection -ComputerName pc99 -Port 445

Compruebe la respuesta del comando. Si TcpTestSucceeded no es igual a True, significa que este puerto está bloqueado por el firewall.

Puede abrir el puerto SMB en el Firewall de Windows Defender en una computadora remota habilitando la regla "Compartir archivos e impresoras" usando el siguiente comando:

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

Asegúrese de que ADMIN% (administrador remoto) y otros recursos compartidos de administración de Windows (C$, IPC$) estén publicados en la computadora remota:

net view \pc99 /all

Si la lista de recursos compartidos de administración en la computadora remota está vacía, ejecute el siguiente comando localmente:

net share

Si no hay recursos compartidos administrativos, debe publicarlos con el comando:

reg add HKLMSYSTEMCurrentControlSetServiceslanmanserverparameters /f /v AutoShareWks /t REG_DWORD /d 0

Luego reinicie su computadora.

Corrección del error: "No se pudo iniciar el servicio PsExec"

En algunos casos, al conectarse a una computadora remota a través de PsExec, puede recibir un error:

No se pudo iniciar el servicio PSEXESVC en la PC:

Acceso denegado.

Si se encuentra con un error de este tipo, intente utilizar una de las siguientes soluciones:

  1. Asegúrese de que su usuario sea miembro del grupo de administradores locales en la computadora remota;
  2. Si el nombre de usuario en una computadora remota difiere del contexto de seguridad actual, intente especificar las credenciales del usuario remoto de la siguiente manera:
    psexec \PC1 -u PC1user1 -p adminpassword -h -i cmd

    (asegúrese de usar la opción –h en su comando PsExec);

  3. En una computadora remota en la clave de registro HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem intente cambiar el valor del parámetro 'LocalAccountTokenFilterPolicy' a 1. Cuando UAC está habilitado, esto le permitirá ejecutar comandos en una computadora remota con los permisos de administrador;
  4. Intente deshabilitar temporalmente el Firewall de Windows en la computadora remota.

Recomendado para ti