Uso de Windows PowerShell para administrar un servidor de forma remota

Completado

El personal de administración de TI de Contoso se centra cada vez más en realizar tareas administrativas de forma remota desde el objeto que están administrando. Un área de interés en particular es la posibilidad de aprovechar Windows PowerShell para administrar de forma remota la infraestructura de TI de Contoso. Para lograr esto, puede usar la comunicación remota de Windows PowerShell.

Requisitos de la comunicación remota

La comunicación remota requiere que tenga Windows PowerShell en el equipo local y la Administración remota de Windows habilitada en los equipos remotos a los que quiere conectarse. También debe habilitar la comunicación remota de Windows PowerShell.

Nota:

La comunicación remota de Windows PowerShell está habilitada de forma predeterminada en Windows Server, pero debe habilitarla en Windows 10.

Para habilitar la comunicación remota de Windows PowerShell, use uno de los procedimientos siguientes. En un símbolo del sistema con privilegios elevados (o en el símbolo del sistema de Windows PowerShell [Administrador]), ejecute el siguiente comando:

Winrm quickconfig

Como alternativa, para habilitar la comunicación remota, puede usar el siguiente cmdlet de Windows PowerShell:

Enable-PSremoting -force

Importante

La Administración remota de Windows se comunica a través de HTTP. De forma predeterminada, la Administración remota de Windows y la comunicación remota de Windows PowerShell usan el puerto TCP 5985 en las conexiones entrantes no cifradas y el puerto TCP 5986 en las conexiones entrantes cifradas.

Nota:

Las aplicaciones que usan la Administración remota de Windows, como Windows PowerShell, también pueden aplicar su propio cifrado a los datos que se pasan al servicio Administración remota de Windows.

Los archivos y otros recursos necesarios para ejecutar un comando determinado deben estar en el equipo remoto, ya que los comandos remotos no copian ningún recurso. Sin embargo, puede ejecutar scripts locales. El motivo es que el contenido del script se envía al equipo remoto, en lugar de al propio archivo de script.

Para realizar la administración remota, los administradores deben tener permiso para:

  • Conectar con el equipo remoto
  • Ejecutar Windows PowerShell
  • Acceder a almacenes de datos y al Registro en el equipo remoto

Precaución

La habilitación de la comunicación remota en equipos con una tarjeta de interfaz de red (NIC) asignada al perfil de ubicación de red pública genera un error. Puede usar Enable-PSremoting -force para omitir esta restricción y forzar la comunicación remota en un dispositivo con una NIC pública.

Ejecución de cmdlets en equipos remotos

Varios cmdlets tienen un parámetro ComputerName que le permite recuperar objetos de equipos remotos. Estos cmdlets no usan la comunicación remota de Windows PowerShell para comunicarse, por lo que puede usar el parámetro ComputerName en estos cmdlets en cualquier equipo que ejecute Windows PowerShell. No es necesario configurar los equipos para la comunicación remota de Windows PowerShell ni cumplir los requisitos del sistema para la comunicación remota.

En la tabla siguiente se proporciona más información sobre el parámetro ComputerName.

Comando Descripción
Get-Command –ParameterName ComputerName Encuentra los cmdlets que usan el parámetro ComputerName.
Get-Help <cmdlet-name> -parameter ComputerName Determine si el parámetro ComputerName requiere la comunicación remota de Windows PowerShell.

Procesamiento de comandos remotos

Cuando se conecta a un equipo remoto y le envía un comando remoto, el comando se transmite a través de la red a una instancia de Windows PowerShell del equipo remoto y, luego, ahí se ejecuta. Los resultados del comando se devuelven al equipo local y se muestran en la sesión de Windows PowerShell en el equipo local.

Todas las entradas locales para un comando remoto se recopilan antes de que se envíen a un equipo remoto. Sin embargo, el resultado se devuelve al equipo local cuando se genera. Cuando se conecta a un equipo remoto, el sistema usa las credenciales de nombre de usuario y contraseña del equipo local para autenticarse en el equipo remoto.

Nota:

De forma predeterminada, el protocolo de autenticación Kerberos versión 5 (V5) se usa para realizar la autenticación y la autorización. Por lo tanto, se requiere un dominio de AD DS.

Sugerencia

En situaciones en las que el equipo remoto no está en un dominio o se encuentra en un dominio que no es de confianza, puede permitir que un equipo cliente se conecte mediante la definición de los equipos remotos como hosts de confianza.

Los cmdlets siguientes admiten la comunicación remota.

  • Invoke-Command
  • Enter-PSSession
  • Exit-PSSession
  • Disconnect-PSSession
  • Receive-PSSession
  • Connect-PSSession

Sugerencia

Puede crear pestañas remotas mediante Windows PowerShell ISE. Para realizar esta tarea, use la opción Nueva pestaña de PowerShell en remoto del menú Archivo de Windows PowerShell ISE.

Al implementar la comunicación remota, puede conectarse a las máquinas remotas mediante una sesión temporal, o puede crear una sesión persistente.

Creación de una tabla temporal

En el caso de una sesión temporal, inicie la sesión, ejecute los comandos y, luego, finalice la sesión. Se trata de un método eficaz para ejecutar un solo comando o varios comandos no relacionados, incluso en un gran número de equipos remotos.

Nota:

Las variables o funciones definidas dentro de los comandos ya no están disponibles después de cerrar la conexión.

Para crear una conexión temporal, use el cmdlet Invoke-Command con el parámetro Invoke-Command para especificar los equipos remotos. A continuación, use el parámetro – ScriptBlock para especificar el comando. Por ejemplo, el siguiente comando ejecuta Get-EventLog en el equipo SEA-DC1:

Invoke-Command –ComputerName SEA-DC1 –ScriptBlock {Get-EventLog –log system}

Creación de una sesión persistente

Para crear una conexión persistente con otro equipo, use el cmdlet New-PSSession. Por ejemplo, el siguiente comando crea una sesión en un equipo remoto y la guarda en la variable $s:

$s = New-PSSession –ComputerName SEA-DC1

Use el cmdlet Enter-PSSession para conectarse a una sesión interactiva e iniciarla. Por ejemplo, después de abrir una nueva sesión en SEA-DC1, el siguiente comando inicia una sesión interactiva con el equipo:

Enter-PSSession $s

Una vez que se entra en una sesión, el símbolo del sistema de Windows PowerShell en el equipo local cambia para indicar la conexión.

A screenshot of the Administrator: Windows PowerShell dialog box. The administrator has connected remotely to SEA-DC1.

La sesión interactiva permanece abierta hasta que se cierra. Esto le permite ejecutar tantos comandos como sea necesario. Para finalizar la sesión interactiva, escriba el siguiente comando:

Exit-PSSession

Ejecución de comandos remotos en varios equipos

En las sesiones temporales, el cmdlet Invoke-Command acepta varios nombres de equipo. En las conexiones persistentes, el parámetro Session acepta varias sesiones de Windows PowerShell. Para ejecutar un comando remoto en varios equipos, incluya todos los nombres de equipo en el parámetro ComputerName con el cmdlet Invoke-Command y separe los nombres con comas, tal como se muestra en el ejemplo siguiente:

Invoke-Command -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2 -ScriptBlock {Get-Culture}

En las sesiones persistentes, también puede ejecutar un comando en varias sesiones de Windows PowerShell. Los siguientes comandos crean sesiones de Windows PowerShell en SEA-DC1, SEA-SVR1 y SEA-SVR2 y, luego, ejecutan un comando Get-Culture en cada una:

$s = New-PSSession -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2

Invoke-Command -Session $s -ScriptBlock {Get-Culture}

Sugerencia

Para incluir el equipo local en la lista de equipos, escriba el nombre o un punto (.) o localhost.

Ejecución de un script en equipos remotos

Para ejecutar un script en equipos remotos, use el parámetro FilePath con Invoke-Command. El siguiente comando ejecuta el script Sample.ps1 en los equipos SEA-DC1 y SEA-SVR1:

Invoke-Command -ComputerName SEA-DC1, SEA-SVR1 –FilePath C:\Test\Sample.ps1

Los resultados del script se devuelven al equipo local. Al usar el parámetro filePath, no es necesario copiar ningún archivo en los equipos remotos.

Demostración

En el vídeo siguiente se muestra cómo administrar un servidor de Windows remoto mediante Windows PowerShell. A continuación, se indican los pasos principales del proceso:

  1. Inicie un símbolo del sistema de PowerShell con privilegios elevados.

  2. Cree una sesión de comunicación remota de PowerShell mediante la ejecución del siguiente comando:

    Enter-PSSession -ComputerName SEA-DC1
    
  3. Recupere información sobre el servidor, como el nombre y la dirección IP, mediante cmdlets estándar de Windows PowerShell.

  4. Compruebe el estado del servicio IIS y reinicie ese servicio con el siguiente comando:

    Get-Service -Name IISAdmin | Restart-Service
    


Revisión rápida

1.

¿Qué cmdlet puede ejecutarse en un equipo de Windows Server remoto para habilitar la comunicación remota de PowerShell?