Cómo ejecutar comandos en equipos remotos con PowerShell

ejecutar comandos localmente en los equipos remotos es una tarea común que muchos administradores de TI tienen que hacer todos los días. Así es como puedes hacerlo en PowerShell.

a veces no es suficiente usar DCOM, RPC y otros protocolos remotos para realizar tareas en equipos remotos. Para ejecutar comandos en el equipo remoto real se requiere un enfoque diferente. Un administrador debe crear una sesión de algún tipo y enviar comandos a través de la red que luego son consumidos por el equipo remoto.,

dado que este es un artículo sobre PowerShell y no sobre telnet (no está utilizando telnet, ¿verdad?), vamos a seguir con una tecnología llamada PowerShell Remoting. La comunicación remota de PowerShell es una característica de PowerShell que se introdujo en Windows PowerShell v2. Permite a los usuarios Abrir, Administrar y cerrar sesiones en equipos remotos e interactuar con ellos como si estuvieran sentados en la consola local.,

para establecer una sesión llamada PSSession con PowerShell, el equipo remoto debe tener habilitada la comunicación remota de PowerShell y la escucha en el puerto 5985 (HTTP) o 5986 (HTTPS) con todas las excepciones habituales del firewall. Dependiendo de cómo el usuario quiera establecer la conexión, también puede ser necesaria alguna configuración de cliente. Hay muchas configuraciones diferentes en las que un usuario puede encontrarse, pero para este artículo, vamos a asumir que los equipos locales y remotos están en el mismo dominio de Active Directory., En este contexto, PowerShell Remoting usará Kerberos para autenticarse, y no necesitaremos pasar credenciales alternativas a los comandos.

asumiendo que el equipo remoto tiene habilitada la comunicación remota de PowerShell, probemos primero ejecutar comandos simples en un equipo remoto. Como prueba para asegurar que el código se está ejecutando en el equipo remoto, siempre me gusta usar el comando hostname que devuelve el nombre del equipo.

Hay dos formas de ejecutar comandos remotos a través de PowerShell Remoting; podemos emitir comandos de forma interactiva o no interactiva., Interactivamente significa que tendremos que estar en nuestro ordenador para ejecutar los comandos físicamente. Comencemos mostrando un ejemplo no interactivo.

para ejecutar comandos remotos de forma no interactiva, utilizamos el comando Invoke-Command. Este comando tiene un parámetro ComputerName que nos permite especificar un equipo para ejecutar el comando. También tenemos un parámetro ScriptBlock donde encapsularemos los comandos que pretendemos ejecutar en el equipo remoto. Puedes ver a continuación cómo funciona esto en acción. Estoy ejecutando el comando hostname localmente en mi computadora y luego lo estoy ejecutando remotamente con Invoke-Command., Puedes ver que devuelve diferentes resultados.

PS C:\> hostname
MACWINVM
PS C:\> Invoke-Command -ComputerName SRV1 -ScriptBlock {hostname}
SRV1

¡ahora ha ejecutado su primer comando remoto! Cualquier cosa puede entrar en el parámetro ScriptBlock. A continuación, Estoy creando una sentencia if/then dentro del SC scriptblock como prueba para asegurar que el código se esté ejecutando de forma remota.

Puede que no te hayas dado cuenta, pero el comando Invoke-Command creó una sesión ligera en segundo plano para ejecutar ese comando y cuando el comando se completó, lo derribó. Esto es más obvio cuando elige ejecutar comandos de forma interactiva con el comando Enter-PSSession.,

el comando Enter-PSSession le permite iniciar sesión en una sesión remota, ejecutar comandos, obtener resultados y trabajar como si estuviera escribiendo comandos en la consola local. Sin embargo, para hacer esto, primero debe establecer una sesión. Una forma de hacerlo es usar el parámetro ComputerName. Observe a continuación que he introducido una sesión remota y tengo un nuevo mensaje de PowerShell precedido por el nombre del equipo en el que se está ejecutando la sesión.

PS C:\> Enter-PSSession -ComputerName SRV1
: PS C:\>

en este punto, puedo ejecutar cualquier comando que desee, y se ejecutarán en el equipo remoto., No necesitamos usar Invoke-Command para hacer esto. Simplemente ejecutamos los comandos tal como están. Cuando terminemos, tenemos que cerrar la sesión. Para ello, utilizamos la palabra clave exit que nos desconecta de la sesión y la cierra.

se puede ver a continuación una vez que escribimos exit y pulsamos Enter, inmediatamente volvemos a nuestra consola local.

: PS C:\>exit
PS C:\>

La comunicación remota de PowerShell es una forma conveniente de ejecutar comandos en equipos remotos., Mientras el equipo remoto esté configurado para la comunicación remota de PowerShell, que es una configuración de una sola vez, se necesita una configuración mínima, si la hay, en el equipo cliente para que esto funcione. Especialmente, si en un entorno de Active Directory, el proceso es perfecto y una gran manera de evitar tener que sneakernet en toda la oficina solo para ejecutar scripts y comandos en todos sus equipos!

Author: admin

Deja una respuesta

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