PowerShell Remoting le permite ejecutar comandos de PowerShell o acceder a sesiones completas de PowerShell en sistemas Windows remotos. Es similar a SSH para acceder a terminales remotos en otros sistemas operativos.
PowerShell está bloqueado de forma predeterminada, por lo que tendrá que habilitar PowerShell Remoting antes de usarlo. Este proceso de configuración es un poco más complejo si usa un grupo de trabajo en lugar de un dominio, por ejemplo, en una red doméstica, pero lo guiaremos a través de él.
¿De qué vamos a hablar?
Habilitar la comunicación remota de PowerShell en el equipo al que desea acceder de forma remota
El primer paso es habilitar PowerShell Remoting en el equipo al que desea realizar conexiones remotas. En ese equipo, deberá abrir PowerShell con privilegios administrativos.
En Windows 10, presione Windows+X y, a continuación, elija PowerShell (Admin) en el menú Usuario avanzado.
En Windows 7 u 8, presione Inicio y, a continuación, escriba “powershell”. Haga clic con el botón derecho en el resultado y elija “Ejecutar como administrador”.
En la ventana de PowerShell, escriba el siguiente cmdlet (nombre de PowerShell para un comando) y, a continuación, presione Entrar:
Enable-PSRemoting -Force
Este comando inicia el servicio WinRM, lo configura para que se inicie automáticamente con el sistema y crea una regla de firewall que permite las conexiones entrantes. El -Force
parte del cmdlet indica a PowerShell que realice estas acciones sin pedirle cada paso.
Si sus PC son parte de un dominio, esa es toda la configuración que tiene que hacer. Puede saltar antes de probar su conexión. Si sus equipos forman parte de un grupo de trabajo, que probablemente estén en una red doméstica o de una pequeña empresa, tiene un poco más de trabajo de configuración que hacer.
Nota: El éxito en la configuración de la comunicación remota en un entorno de dominio depende completamente de la configuración de la red. La comunicación remota puede deshabilitarse, o incluso habilitarse, automáticamente mediante la directiva de grupo configurada por un administrador. Es posible que tampoco tenga los permisos que necesita para ejecutar PowerShell como administrador. Como siempre, consulte con sus administradores antes de intentar algo como esto. Es posible que tengan buenas razones para no permitir la práctica, o que estén dispuestos a configurarla para usted.
Configurar el grupo de trabajo
Si sus equipos no están en un dominio, debe realizar algunos pasos más para configurar las cosas. Ya debería haber habilitado La comunicación remota en el PC al que desea conectarse, como describimos en la sección anterior.
Nota: Para que PowerShell Remoting funcione en un entorno de grupo de trabajo, debe configurar la red como una red privada, no pública. Para obtener más información sobre la diferencia, y cómo cambiar a una red privada si ya tiene una red pública configurada, consulte nuestra guía sobre redes privadas frente a redes públicas.
A continuación, debe configurar la configuración de TrustedHosts en la PC a la que desea conectarse y el PC (o PC) desde el que desea conectarse, por lo que los equipos confiarán entre sí. Puede hacer esto de una de dos maneras.
Si se encuentra en una red doméstica en la que desea seguir adelante y confiar en cualquier equipo para conectarse de forma remota, puede escribir el siguiente cmdlet en PowerShell (de nuevo, deberá ejecutarlo como administrador).
Set-Item wsman:/localhost/client/trustedhosts *
El asterisco es un símbolo comodín para todos los EQUIPOS. Si, en cambio, desea restringir los equipos que pueden conectarse, puede reemplazar el asterisco con una lista separada por comas de direcciones IP o nombres de equipo para equipos aprobados.
Después de ejecutar ese comando, deberá reiniciar el servicio WinRM para que la nueva configuración surta efecto. Escriba el siguiente cmdlet y, a continuación, presione Entrar:
Restart-Service WinRM
Y recuerde, deberá ejecutar esos dos cmdlets en el equipo al que desea conectarse, así como en cualquier equipo desde el que desee conectarse.
Probar la conexión
Ahora que tiene sus equipos configurados para PowerShell Remoting, es hora de probar la conexión. En el equipo desde el que desea tener acceso al sistema remoto, escriba el siguiente cmdlet en PowerShell (reemplazando “EQUIPO” con el nombre o la dirección IP del equipo remoto) y, a continuación, presione Entrar:
Test-WsMan COMPUTER
Este sencillo comando prueba si el servicio WinRM se está ejecutando en el equipo remoto. Si se completa correctamente, verá información sobre el servicio WinRM del equipo remoto en la ventana, lo que significa que WinRM está habilitado y que su PC puede comunicarse. Si el comando falla, verá un mensaje de error en su lugar.
Ejecutar un único comando remoto
Para ejecutar un comando en el sistema remoto, utilice el comando Invoke-Command
cmdlet con la sintaxis siguiente:
Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME
“COMPUTER” representa el nombre o la dirección IP del PC remoto. “COMMAND” es el comando que desea ejecutar. “USERNAME” es el nombre de usuario que desea ejecutar el comando como en el equipo remoto. Se te pedirá que introduzcas una contraseña para el nombre de usuario.
Aquí hay un ejemplo. Quiero ver el contenido del C:/ directory en un ordenador remoto con la dirección IP 10.0.0.22. Quiero usar el nombre de usuario “wjgle”, por lo que usaría el siguiente comando:
Invoke-Command -ComputerName 10.0.0.22 -ScriptBlock { Get-ChildItem C:/ } -credential wjgle
Iniciar una sesión remota
Si tiene varios cmdlets que desea ejecutar en el equipo remoto, en lugar de escribir repetidamente el cmdlet Invoke-Command y la dirección IP remota, puede iniciar una sesión remota en su lugar. Simplemente escriba el siguiente cmdlet y, a continuación, presione Entrar:
Enter-PSSession -ComputerName COMPUTER -Credential USER
Nuevamente, reemplace “COMPUTER” con el nombre o la dirección IP de la PC remota y reemplace “USER” con el nombre de la cuenta de usuario que desea invocar.
El mensaje cambia para indicar el equipo remoto al que está conectado y puede ejecutar cualquier número de cmdlets de PowerShell directamente en el sistema remoto.