• ¡Obtenga la seguridad de la aplicación de la manera correcta! Detectar, proteger, monitorear, acelerar y más ...
  • Le mostraré varias operaciones que un administrador puede realizar en un sistema de Windows remoto usando ansible-playbook.

    Ansible es una de las herramientas DevOps más utilizadas en el mercado actual. Proporciona un montón de módulos de Windows que se utilizan para configurar y administrar el servidor de Windows. Supongo que ya tienes Ansible instalado en Windows desde donde desea administrar los servidores de Windows.

    Las siguientes son algunas de las tareas más utilizadas que realizan los administradores de Windows a diario. Se sorprenderá de ver lo fácil que es administrar Windows usando Ansible.

    La dirección IP de mi máquina controladora Ansible Windows es 192.168.0.106, y la dirección IP de mi sistema Windows remoto es 192.168.0.102. Antes de comenzar, asegúrese de ejecutar un win_ping módulo para comprobar si puede conectarse al servidor remoto de Windows o no.

    [email protected] ~
    $ ansible win -m win_ping
    192.168.0.102 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }

    Mi conexión a un host remoto es exitosa.

    Entonces, comencemos con Ansible Playbooks ...

    Copiando documentos

    win_copy es un módulo ansible que copia un archivo del servidor local a un host remoto de Windows. Usaré este módulo para copiar un solo PDF.

    Utilice el siguiente código YAML, proporcione las rutas de origen y destino.

    [email protected] ~
    $ vi copy.yml
    ---
    
    - hosts: win
    
      tasks:
    
      - name: Copy File
    
        win_copy:
    
          src: C:\output.pdf
    
          dest: C:\ansible_examples\
         
          remote_src: yes

    Ejecute el ansible-playbook para win_copy.

    [email protected] ~
    $ ansible-playbook copy.yml
    
    PLAY [win] ***********************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Copy File] *****************************************************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=2 changed=1 unreachable=0 failed=0
    skipped=0 rescued=0 ignored=0

    El archivo se ha copiado correctamente en la ubicación de destino en un sistema de Windows remoto.

    copia de windows ansible

    Instalar / desinstalar MSI

    Para instalar una aplicación usando el archivo MSI, necesita usar win_get_url para mencionar la ruta del archivo MSI para descargar y luego usar el win_package módulo para instalarlo. El estado presente significa que el MSI se instalará en la máquina y la aplicación se encuentra en el estado actual.

    Aquí estoy instalando Apache.

    Código YAML que se utilizará:

    [email protected] ~
    $ vi msi.yml
    ---
    - name: Installing Apache MSI 
      hosts: win 
     
      tasks:
        - name: Download the Apache installer
          win_get_url:
            url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi
            dest: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
    
        - name: Install MSI
          win_package: 
            path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
            state: present

    Ejecute el ansible-playbook para instalar usando MSI.

    [email protected] ~
    $ ansible-playbook msi.yml
    
    PLAY [Installing Apache MSI] *****************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Download the Apache installer] *********************************************************************************************************
    changed: [192.168.0.102]
    
    TASK [Install MSI] ***************************************************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=3 changed=2 unreachable=0 failed=0
    skipped=0 rescued=0 ignored=0

    Ahora, vaya al sistema de Windows y verifique si la aplicación apache se instaló correctamente.

    C:\Users\geekflare>cd C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin
    C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v
    Server version: Apache/2.2.25 (Win32)
    Server built: Jul 10 2013 01:52:12

    También puede instalar aplicaciones usando MSI con argumentos. A continuación se muestra el mismo ejemplo que el anterior, pero en lugar de un estado, estamos usando un argumento de instalación para instalar apache.

    Código YAML que se utilizará:

    ---
    
    - name: Installing Apache MSI 
    
      hosts: win 
    
      tasks:
    
        - name: Download the Apache installer
    
          win_get_url:
    
            url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi
    
            dest: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
    
    
        - name: Install MSI
    
          win_package: 
    
            path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
    
            arguments:
    
              - /install
    
              - /passive
    
              - /norestart

    Para desinstalar una aplicación usando el archivo MSI, necesita usar el win_package módulo. El estado ausente significa que la aplicación se desinstalará mediante el archivo MSI.

    Aquí, estoy desinstalando Apache.

    [email protected] ~
    $ vi uninstall_msi.yml
    
    ---
    
    - name: UnInstalling Apache MSI 
    
      hosts: win 
    
      tasks:
    
        - name: UnInstall MSI
    
          win_package: 
    
            path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
    
            state: absent

    Ejecute el ansible-playbook para desinstalar usando MSI.

    [email protected] ~
    $ ansible-playbook uninstall_msi.yml
    
    PLAY [UnInstalling Apache MSI] *****************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [UnInstall MSI] *************************************************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=2 changed=1 unreachable=0 failed=0
    skipped=0 rescued=0 ignored=0

    Ahora, si verifico la versión de Apache, obtendré el siguiente resultado cuando la aplicación se desinstale.

    C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v 'httpd' is not recognized as an internal or external command,
    operable program or batch file.

    Desinstalar software (.EXE)

    También puede desinstalar el software con el archivo .exe utilizando la identificación del producto de ese software.

    [email protected] ~
    $ vi uninstall.yml 
    ---
    
    - hosts: win 
    
      tasks:
    
       - name: Uninstall 7-Zip from the exe
    
         win_package:
    
           path: C:\Program Files\7-Zip\Uninstall.exe
    
           product_id: 7-Zip
    
           arguments: /S
    
           state: absent

    Ejecute el ansible-playbook para desinstalar 7-Zip.

    [email protected] ~
    $ ansible-playbook uninstall.yml
    
    PLAY [win] *************************************************************************************************************************************************************************************
    
    TASK [Gathering Facts] *************************************************************************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Uninstall 7-Zip from the exe] ***********************************************************************************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP *************************************************************************************************************************************************************************************
    192.168.0.102              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    Detener / Iniciar / Reiniciar servicios de Windows

    win_service El módulo ansible se utiliza para iniciar, detener o reiniciar un servicio. Aquí, le mostraré cómo detener el servicio Tomcat.

    ansible windows tomcat

    Debe mencionar el nombre del servicio en el archivo YAML y establecer el estado para detener.

    [email protected] ~
    $ vi service.yml
    ---
    - hosts: win 
    
      tasks: 
    
       - name: Stop service Tomcat
    
         win_service:
    
           name: Tomcat8
    
           state: stopped

    Ejecute el ansible-playbook para detener el servicio tomcat.

    [email protected] ~
    $ ansible-playbook service.yml
    
    PLAY [win] ***********************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Stop service Tomcat] ****************************************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=2 changed=1 unreachable=0 failed=0
    skipped=0 rescued=0 ignored=0

    Si verifica el servicio Tomcat en el sistema Windows, ahora está en estado detenido.

    ansible windows tomcat stop

    Puede definir el estado en iniciado o reiniciado o en pausa para cambiar el estado del servicio.

    Recopilación de hechos

    Usar win_disk_facts módulo ansible, puede recuperar toda la información del disco del host de destino.

    [email protected] ~
    $ vi disk.yml
    ---
    - hosts: win 
      tasks: 
      - name: Get disk facts
        win_disk_facts:
    
      - name: Output first disk size
        debug:
          var: ansible_facts.disks[0].size
    
      - name: Convert first system disk into various formats
        debug:
          msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}'
        vars:
          # Get first system disk
          disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}'
    
          # Show disk size in Gibibytes
          disksize_gib_human: '{{ disk.size|filesizeformat(true) }}' 
          disksize_gib: '{{ (disk.size/1024|pow(3))|round|int }} GiB'

    Ejecute el ansible-playbook para obtener la información del disco.

    [email protected] ~
    $ ansible-playbook disk.yml
    
    PLAY [win] ***********************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Get disk facts] ************************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Output first disk size] ****************************************************************************************************************
    ok: [192.168.0.102] => {
    
    "ansible_facts.disks[0].size": "1000204886016"
    }
    
    TASK [Convert first system disk into various formats] ****************************************************************************************
    ok: [192.168.0.102] => {
    "msg": "932 GiB vs 931.5 GiB"
    }
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=4 changed=0 unreachable=0 failed=0
    skipped=0 rescued=0 ignored=0

    Usar win_command ansible, puede ejecutar comandos en el host remoto y obtener información de la CPU, detalles del dispositivo y mucho más.

    [email protected] ~
    $ vi check.yml
    ---
    - hosts: win 
      tasks:
       - name: Get disk facts
         win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status
         register: usage
    
       - debug: msg="{{ usage.stdout }}"

    Ejecute el ansible-playbook para obtener información del sistema remoto.

    [email protected] ~
    $ ansible-playbook check.yml
    
    PLAY [win] ***********************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Get facts] ************************************************************************************************************************
    changed: [192.168.0.102]
    
    TASK [debug] *********************************************************************************************************************************
    ok: [192.168.0.102] => {
    "msg": "Caption DeviceID MaxClockSpeed
    Name
    NumberOfCores Status \r\r\nIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK \r\r\n\r\r\n"
    }
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=3 changed=1 unreachable=0 failed=0
    skipped=0 rescued=0
    ignored=0

    Ejecución de comandos

    Independientemente de los comandos que ejecute en una ventana, se pueden ejecutar a través del ansible win_command módulo. Solo necesita especificar el comando en su archivo YAML. Aquí, solo estoy creando un directorio.

    [email protected] ~
    $ vi commands.yml
    ---
    
    - hosts: win 
    
      tasks:
    
       - name: run an executable using win_command
    
         win_command: whoami.exe
    
    
       - name: run a cmd command
    
          win_command: cmd.exe /c mkdir C:\test

    Ejecute el ansible-playbook para realizar la operación win_command.

    [email protected] ~
    $ ansible-playbook commands.yml
    
    PLAY [win] ***********************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [run an executable using win_command] ***************************************************************************************************
    changed: [192.168.0.102]
    
    TASK [run a cmd command] *********************************************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=3 changed=2 unreachable=0 failed=0
    skipped=0 rescued=0 ignored=0

    Variables de entorno

    Un sistema de Windows tiene múltiples variables de entorno, por ejemplo, JAVA_HOME. Utilizando la win_environment módulo ansible, puede agregar o modificar variables de entorno en un sistema Windows. En este ejemplo, estoy agregando una nueva variable a la lista de variables de entorno de Windows.

    [email protected] ~
    $ vi env.yml
    ---
    - hosts: win 
      tasks:
       - name: Set an environment variable for all users
         win_environment:
           state: present
           name: NewVariable
           value: New Value
           level: machine

    Ejecute el ansible-playbook para agregar la variable de entorno en una máquina Windows remota.

    [email protected] ~
    $ ansible-playbook env.yml
    
    PLAY [win] ***********************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Set an environment variable for all users] *********************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=2 changed=1 unreachable=0 failed=0
    skipped=0 rescued=0 ignored=0

    Vaya a la ventana de variables de entorno; verá que la nueva variable que acaba de agregar está presente aquí.

    variables de Windows ansible

    Agregar / editar registro

    win_regedit El módulo ansible se utiliza para agregar o editar los detalles del registro en una máquina Windows remota. Debe proporcionar la ruta del registro y el contenido que se agregará / actualizará. Aquí estoy creando una nueva entrada de registro GeekFlare dentro de HKLM: \ SOFTWARE path y luego agrego nombre y datos a este registro.

    [email protected] ~
    $ vi registry.yml
    ---
    
    - hosts: win 
    
      tasks:
    
       - name: Creating a registry
    
         win_regedit:
    
          path: HKLM:\SOFTWARE\GeekFlare
    
       - name: Modifying a registry, adding name and data
    
         win_regedit:
    
          path: HKLM:\SOFTWARE\GeekFlare
    
          name: Geek
    
          data: Flare

    Ejecute el ansible-playbook para agregar el registro.

    [email protected] ~
    $ ansible-playbook registry.yml
    
    PLAY [win] ***********************************************************************************************************************************
    
    TASK [Gathering Facts] ***********************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Creating a registry] *******************************************************************************************************************
    changed: [192.168.0.102]
    
    TASK [Modifying a registry, adding name and data] ********************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP ***********************************************************************************************************************************
    192.168.0.102
    : ok=3 changed=2 unreachable=0 failed=0
    skipped=0 rescued=0 ignored=0

    Si va al Editor del registro en el sistema remoto, puede ver que este registro se ha agregado correctamente con los parámetros de Nombre y Datos.

    registro de windows ansible

    Eliminar registro

    win_eventlog El módulo ansible se utiliza para agregar, borrar o eliminar registros de eventos de Windows del sistema de Windows.

    Vaya a Windows Powershell y enumere los EventLogs presentes en la máquina de Windows remota.

    PS C:\Users\Geekflare> Get-EventLog -List                                                                                 
      Max(K) Retain OverflowAction        Entries Log
      ------ ------ --------------        ------- ---
      20,480      0 OverwriteAsNeeded      33,549 Application
      20,480      0 OverwriteAsNeeded           0 HardwareEvents
         512      7 OverwriteOlder             20 Internet Explorer
      20,480      0 OverwriteAsNeeded           0 Key Management Service
         128      0 OverwriteAsNeeded         190 OAlerts
                                                  Security
      20,480      0 OverwriteAsNeeded      44,828 System
      15,360      0 OverwriteAsNeeded       3,662 Windows PowerShell

    Ahora, mostraré cómo eliminar registros de todas las fuentes para Internet Explorer.

    [email protected] ~
    $ vi log.yml
    ---
    - hosts: win 
      tasks:
       - name: Remove Internet Explorer Logs
         win_eventlog:
          name: Internet Explorer
          state: absent

    Ejecute el ansible-playbook para eliminar Internet Explorer de la máquina remota de Windows.

    [email protected] ~
    $ ansible-playbook log.yml
    
    PLAY [win] *************************************************************************************************************************************************************************************
    
    TASK [Gathering Facts] *************************************************************************************************************************************************************************
    ok: [192.168.0.102]
    
    TASK [Remove Internet Explorer Logs] **********************************************************************************************************************************************
    changed: [192.168.0.102]
    
    PLAY RECAP *************************************************************************************************************************************************************************************
    192.168.0.102              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    Ahora, si vuelve a enumerar los EventLogs, verá que se han eliminado los registros de Internet Explorer.

    PS C:\Users\Geekflare> Get-EventLog -List
    
      Max(K) Retain OverflowAction        Entries Log
      ------ ------ --------------        ------- ---
      20,480      0 OverwriteAsNeeded      33,549 Application
      20,480      0 OverwriteAsNeeded           0 HardwareEvents
      20,480      0 OverwriteAsNeeded           0 Key Management Service
         128      0 OverwriteAsNeeded         190 OAlerts
                                                  Security
      20,480      0 OverwriteAsNeeded      44,835 System
      15,360      0 OverwriteAsNeeded          56 Windows PowerShell

    Entonces, todo se trataba de los libros de jugadas de Ansible, que se pueden usar para la administración remota de Windows. Continúe y pruebe estos libros de jugadas. También puedes probar otros Módulos de Ansible Windows disponible.