Cómo ejecutar comandos utilizando el uso compartido de PowerShell
- Qué es el Acceso Remoto de PowerShell
-
Configurar Oyentes
WinRM
en PowerShell - Crear una Nueva Sesión de PowerShell
- Usar Métodos Invoke para Ejecutar Comandos Rápidos de Forma Remota en 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:
-
El usuario intenta conectarse al servidor de destino en un oyente
WinRM
. El oyenteWinRM
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 llamadoWSMan
.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. -
El proceso de autenticación comienza cuando el cliente se conecta al oyente a través del protocolo HTTP o HTTPS.
-
Después de que el cliente se conecta y autentica en el servidor,
PSRemoting
genera una sesión. -
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.
- 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.
- 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. - 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
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn