Página principal » cómo » Escuela Geek Aprende a usar la comunicación remota en PowerShell

    Escuela Geek Aprende a usar la comunicación remota en PowerShell

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

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

    • Aprenda cómo automatizar Windows con PowerShell
    • Aprendiendo a usar cmdlets en PowerShell
    • Aprender a usar objetos en PowerShell
    • Aprendizaje de formato, filtrado y comparación en PowerShell

    Y estad atentos para el resto de la serie toda la semana..

    Que es Remoting?

    La administración masiva de sus servidores puede ser tediosa, y si ha tenido que hacer un cambio de configuración de IIS en 50 servidores web antes, sabrá a qué me refiero. Estos son los tipos de situaciones en las que PowerShell Remoting y las habilidades de escritura del lenguaje pueden venir al rescate. Usando HTTP o el HTTPS más seguro, PowerShell Remoting le permite enviar comandos a una máquina remota en su red. La máquina ejecuta los comandos y le envía la salida, que a su vez se muestra en su pantalla..

    Consigamos técnica

    En el núcleo de PowerShell Remoting se encuentra un único servicio de Windows, la administración remota de Windows o el servicio WinRM, como se lo conoce. 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 brindar a la persona que se conecta a su instancia remota de PowerShell. Más específicamente, puede usar los archivos de configuración de sesión para definir quién puede y quién no puede conectarse a la instancia, qué cmdlets y secuencias de comandos pueden ejecutar, así como en qué contexto de seguridad debe ejecutarse la sesión. Al usar el servicio WinRM, también configura "escuchas", que escuchan las solicitudes entrantes de PowerShell. Estos "escuchas" pueden ser HTTP o HTTPS y pueden estar vinculados a una única dirección IP en su máquina. Cuando abre una conexión de PowerShell a otra máquina (técnicamente esto se hace usando el protocolo WS-MAN, que se basa en HTTP), la conexión se enlaza a uno de estos "escuchas". Los "oyentes" se encargan 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 hosting si lo desea), luego ejecuta el comando y envía los resultados a través del "oyente" a través de la red y de vuelta a su máquina..

    Muéstrame cómo

    Lo primero que deberá hacer es habilitar la comunicación remota en la máquina a la que desea conectarse. Esto se puede hacer ejecutando lo siguiente:

    Habilitar-PSRemoting

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

    • Se inicia el servicio WinRM.
    • El servicio WinRM cambia de 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 por defecto

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

    Enable-PSRemoting -SkipNetworkProfileCheck

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

    Hay dos formas de conectarse a otra máquina utilizando PowerShell. Existe el método one to one, que es muy similar al uso de SSH, y luego está el método one to one.

    Usando una sesión de PowerShell

    La primera forma de conectarse a una máquina remota mediante PowerShell es usar algo llamado PowerShell Session. Simplemente, una sesión le permite ejecutar comandos en la máquina remota de 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"

    La solicitud ganará un prefijo que significa la máquina contra la que está ejecutando los cmdlets.

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

    Get-ChildItem -Path C: \

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

    Usando el comando invocar

    La segunda forma en que puede usar PowerShell en una máquina remota es mediante el uso de 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 puede imaginar, esto es particularmente útil cuando quiere 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á alguna forma de ver de qué PC proviene un resultado dado. Puedes hacerlo mirando la propiedad PSComputerName.

    Cuando usa Invoke-Command, ya no tiene los objetos que podría esperar en el Pipeline. Usted ve, para que PowerShell pueda obtener la información de la máquina remota de regreso a su máquina, necesitan alguna forma de representar los objetos que el comando que ejecutó en la máquina remota genera. 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 emite un comando utilizando Invoke-Command, los resultados se serializan primero en XML antes de enviarlos de vuelta a su máquina. Una vez que regresan a su máquina, se deserializan de nuevo en un objeto; Lo que tenemos 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: hay algunas excepciones a esta regla, por ejemplo, la mayoría de los tipos primitivos, como los enteros, se pueden deserializar con sus métodos incluidos. También hay un proceso llamado Rehidratación en el que algunos métodos se pueden volver a agregar a los objetos deserializados. Así que ten cuidado y recuerda que Get-Member es tu amigo.

    Deberes

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