Cómo ejecutar comandos utilizando el uso compartido de PowerShell

  1. Qué es el Acceso Remoto de PowerShell
  2. Configurar Oyentes WinRM en PowerShell
  3. Crear una Nueva Sesión de PowerShell
  4. Usar Métodos Invoke para Ejecutar Comandos Rápidos de Forma Remota en PowerShell
Cómo ejecutar comandos utilizando el uso compartido de PowerShell

Con Windows PowerShell, hay múltiples formas de ejecutar un comando en computadoras locales o remotas. Una forma es habilitar el acceso remoto de PowerShell y usar los comandos de sesión de PowerShell.

Este artículo discutirá cómo funciona el acceso remoto de PowerShell, la configuración de WinRM, un par de ejemplos de comandos de sesión de PowerShell y cómo podemos acceder de forma remota a una computadora con acceso de administrador.

Qué es el Acceso Remoto de PowerShell

El Acceso Remoto de PowerShell (o PSRemoting) es una de las características utilizadas frecuentemente en PowerShell. Como resultado, podemos conectarnos sin problemas a una o más computadoras remotas y ejecutar comandos utilizando un solo comando.

En resumen, PSRemoting nos permite ejecutar comandos en computadoras remotas como si estuviéramos sentados frente a ellas. Además, PSRemoting proporciona características que conectan y autentican a un usuario, ejecutan cmdlets remotos y muestran cualquier salida de ese cmdlet en la computadora local.

Piensa en PSRemoting como SSH o telnet o incluso psexec. Es solo una forma de ejecutar comandos en computadoras dentro de PowerShell.

PSRemoting depende en gran medida de ejecutar comandos en una sesión. Una sesión es un shell remoto que ejecuta comandos dentro.

Crear una de estas sesiones pasa por muchos pasos en segundo plano en la consola de PowerShell.

Cuando iniciamos una sesión de PSRemoting, los siguientes pasos aproximados se llevan a cabo:

  1. El usuario intenta conectarse al servidor de destino en un oyente WinRM. El oyente WinRM es un pequeño servicio web que se ejecuta en un servidor.

    WinRM es la versión de Microsoft de un estándar de implementación llamado WSMan. WSMan es un estándar de código abierto creado con muchas otras grandes empresas tecnológicas en ese momento, como Intel, Dell y Sun Microsystems.

  2. El proceso de autenticación comienza cuando el cliente se conecta al oyente a través del protocolo HTTP o HTTPS.

  3. Después de que el cliente se conecta y autentica en el servidor, PSRemoting genera una sesión.

  4. Después de que PSRemoting genera la sesión, está abierta para el negocio. El cliente puede comenzar a enviar información al servidor, devolviendo cualquier salida necesaria conocida como serialización.

    Esta comunicación está típicamente encriptada.

Para habilitar PSRemoting, escribe el comando de abajo en tu consola de PowerShell.

Enable-PSRemoting Force

Configurar Oyentes WinRM en PowerShell

Un cliente necesita un lugar para conectarse a través de la red. El cliente necesita “hablar” con algo que está “escuchando” al otro lado; la parte de “escucha” es el rol del oyente WinRM.

Puedes descubrir todos los oyentes WinRM que se ejecutan en cualquier computadora con Windows utilizando el comando winrm a continuación.

winrm e winrm/config/listener

Los oyentes WinRM tienen algunos componentes esenciales.

  1. Dirección de escucha – La dirección IP a la que se vinculan. La dirección de escucha es la dirección IP del servidor a la que se conecta el cliente.
  2. Tipo de transporte – Cada oyente WinRM necesita una forma de comunicarse con el cliente; lo hacen a través de transporte usando HTTP o HTTPS.
  3. Huella digital del certificado opcional – Si un oyente WinRM utiliza HTTPS para el transporte, debe saber qué clave privada usar para autenticar al cliente; esta clave se encuentra utilizando una huella digital de certificado.

Para agregar una computadora remota a una lista de hosts de confianza para la computadora local en WinRM, escribe el siguiente comando a continuación.

winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'

Para verificar y comprobar la configuración de WinRM, escribe el siguiente comando a continuación.

winrm quickconfig

Crear una Nueva Sesión de PowerShell

El comando New-PSSession crea una sesión de Windows PowerShell (PSSession) en una computadora local o remota. Al crear una PSSession, PowerShell establece una conexión persistente con la computadora remota.

Podemos ejecutar comandos en una computadora remota sin crear una PSSession utilizando los parámetros –ComputerName de Enter-PSSession o Invoke-Command.

Cuando usas el parámetro –ComputerName, PowerShell crea una conexión temporal que se utiliza para el cmdlet y luego se cierra.

Comenzando con Windows PowerShell 6.0, podemos usar Secure Shell (SSH) para crear y establecer una sesión en una máquina remota si SSH está habilitado en la computadora local y la computadora remota está configurada con un punto final de Windows PowerShell SSH.

Uno de los beneficios de una sesión remota iniciada por Windows PowerShell basada en SSH es que puede funcionar en múltiples plataformas (Windows, Linux, macOS) o ser multiplataforma.

Para las sesiones basadas en SSH, podemos usar los parámetros -HostName o -SSHConnection para especificar la computadora remota y otra información de conexión relevante.

New-PSSession -ComputerName DC01 -Credential (Get-Credential)

Recuerda que la sesión generada por el comando New-PSSession es persistente. Lo que significa que podemos usarla múltiples veces.

Sin embargo, debemos recordar que debemos cerrar la sesión después de usar el comando Remove-PSSession para evitar riesgos de seguridad.

Usar Métodos Invoke para Ejecutar Comandos Rápidos de Forma Remota en PowerShell

El cmdlet Invoke-Command es preferible si escribimos los comandos ejecutados ahora, ya que mantenemos IntelliSense en nuestro IDE. También, Invoke-Command es ventajoso si ejecutamos comandos rápidos y fáciles de un solo uso.

La sesión de cualquier método Invoke no es persistente y no retiene ninguna sesión que los usuarios maliciosos puedan abusar.

El fragmento a continuación es un ejemplo de Invoke-Command que pasa un nombre de usuario y una contraseña de cadena segura que habilitarán la ejecución de comandos a nivel de administrador.

Ejemplo de Script:

$username = "Username"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object { $secstr.AppendChar($_) }
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $secstr

Invoke-Command -ComputerName RemoteServer -ScriptBlock { Get-Process } -Credential $cred
¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn