6Sep

Escuela Geek: Aprende a utilizar el uso de Remoting en PowerShell

Una de las mejores características que ofrece PowerShell es la capacidad de administrar remotamente sus servidores. Incluso te permite administrar un montón de ellos a la vez.

Asegúrese de leer los artículos anteriores de la serie:

  • Aprenda a automatizar Windows con PowerShell
  • Aprenda a usar los cmdlets en PowerShell
  • Aprenda a usar los objetos en PowerShell
  • Aprenda a formatear, filtrar y comparar en PowerShell

Y esté atento alresto de la serie toda la semana.

¿Qué es Remoting?

La administración masiva de sus servidores puede ser tediosa, y si ha tenido que hacer una configuración de IIS cambiar en 50 servidores web antes, sabrá a qué me refiero. Este es el tipo de situaciones en las que PowerShell Remoting y las habilidades de scripting del lenguaje pueden venir al rescate. Al usar HTTP o el HTTPS más seguro, PowerShell Remoting le permite enviar comandos a una máquina remota en su red. A continuación, la máquina ejecuta los comandos y le devuelve la salida, que a su vez se muestra en la pantalla.

Vamos a obtener técnicos

En el núcleo de PowerShell Remoting se encuentra un solo servicio de Windows, la administración remota de Windows o el servicio WinRM, como se ha llegado a conocer. Con WinRM, puede configurar una o más configuraciones de sesión( también conocidas como puntos finales), que son básicamente archivos que contienen información sobre la experiencia que desea proporcionar a la persona que se conecta a su instancia remota de PowerShell. Más específicamente, puede usar archivos de configuración de sesión para definir quién puede y quién no se puede conectar a la instancia, qué cmdlets y scripts pueden ejecutar, así como en qué contexto de seguridad debe ejecutarse la sesión. Al usar el servicio WinRM, también configura "oyentes", que escuchan las solicitudes entrantes de PowerShell. Estos "oyentes" pueden ser HTTP o HTTPS y pueden vincularse a una sola dirección IP en su máquina. Cuando abre una conexión de PowerShell a otra máquina( técnicamente, esto se hace utilizando el protocolo WS-MAN, que se basa en HTTP), la conexión se une a uno de estos "oyentes".Los "oyentes" están a cargo de enviar el tráfico a la aplicación asociada con el archivo de configuración de sesión apropiado;la aplicación( normalmente PowerShell, pero puede tener otras aplicaciones de alojamiento, si lo desea) ejecuta el comando y envía los resultados a través del "oyente" a través de la red y vuelve a su máquina.

Muéstrame cómo

Lo primero que tendrás que hacer es habilitar Remoting en la máquina a la que deseas conectarte. Esto se puede hacer ejecutando lo siguiente:

Enable-PSRemoting

Deberá responder sí a todas las solicitudes. Cuando ejecuta Enable-PSRemoting, se realizan algunos cambios en su PC:

  • Se inicia el servicio WinRM.
  • El servicio de WinRM cambia del modo de inicio manual a automático.
  • Crea un oyente HTTP que está vinculado a todas sus tarjetas de red.
  • También crea una excepción de firewall de entrada para el protocolo WS-MAN.
  • Se crean algunas configuraciones de sesión predeterminadas

Si está ejecutando Windows 7 y la ubicación de su tarjeta de red está configurada en Público, la habilitación de PowerShell Remoting fallará.Para solucionarlo, simplemente cambie a la ubicación de red de Casa o Trabajo. Alternativamente, puede omitir la verificación de red usando lo siguiente:

Enable-PSRemoting -SkipNetworkProfileCheck

Sin embargo, le recomendamos que cambie la ubicación de su red.

Hay dos maneras de conectarse a otra máquina usando PowerShell. Existe el método uno a uno, que es muy similar al uso de SSH, y luego está el método de uno a muchos.

Uso de una sesión de PowerShell

La primera forma de conectarse a una máquina remota utilizando PowerShell es usar algo llamado sesión de PowerShell. Simplemente ponga una sesión le permite ejecutar comandos en la máquina remota de una manera interactiva de la misma manera que lo haría en su propia máquina. Para abrir una sesión, simplemente escriba lo siguiente:

Enter-PSSession -ComputerName "Darlah"

El aviso obtendrá un prefijo que significa la máquina contra la que está ejecutando los cmdlets.

Desde aquí realmente puede tratar el aviso como si estuviera sentado en la máquina remota. Por ejemplo, si desea ver todos los archivos en la unidad C: \ puede hacer un simple:

Get-ChildItem -Path C: \

Si proviene de un entorno Linux, puede pensar en utilizar este método de comunicación remota de uno a uno como la alternativa de PowerShell a SSH.

Uso de Invoke-Command

La segunda forma en que puede usar PowerShell en una máquina remota es utilizando Invoke-Command. La ventaja de usar Invoke-Command proviene del hecho de que puede ejecutar el mismo comando en varias máquinas simultáneamente. Como se puede imaginar, esto es particularmente útil cuando desea hacer algo como reunir registros de eventos de sus servidores. Invoke-Command sigue la siguiente sintaxis:

Invoke-Command -ComputerName Darlah, localhost -ScriptBlock{ Get-EventLog Application -Newest 2}

Dado que el comando se ejecuta en paralelo en todas las máquinas, necesitará una forma de ver qué PCresultado dado vino de. Puede hacerlo mirando la propiedad PSComputerName.

Cuando utiliza Invoke-Command, ya no tiene los objetos que podría esperar en Pipeline. Verá, para que PowerShell obtenga la información de la máquina remota en su máquina, necesita alguna forma de representar los objetos que emite el comando que ejecutó en la máquina remota. En estos días, parece que la forma elegida para representar una estructura de datos jerárquica es usar XML, lo que significa que cuando se emite un comando usando Invoke-Command, los resultados se serializan primero en XML antes de enviarlos a su máquina. Una vez que regresan a su máquina, se deserializan de nuevo en un objeto;El problema aquí es que cuando se deserializan, todos los métodos, excepto el método ToString() , que el objeto tenía, se eliminan de él.

Nota: Existen algunas excepciones a esta regla, por ejemplo, la mayoría de los tipos primitivos, como los enteros, pueden deserializarse con sus métodos incluidos. También hay un proceso llamado Rehidratación donde algunos métodos pueden ser agregados a objetos deserializados. Así que ten cuidado y recuerda que Get-Member es tu amigo.

deberes

  • Lea los secretos de PowerShell Remoting ebook de Don Jones.