Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En DevOps y Windows Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Le mostraré varias operaciones que un administrador puede realizar en un sistema windows remoto utilizando ansible-playbook

Ansible es una de las herramientas DevOps más utilizadas actualmente en el mercado. Proporciona un conjunto de módulos Windows que pueden utilizarse para configurar y administrar el servidor Windows. Asumo que ya tiene Ansible instalado en Windows desde quiere gestionar los servidores Windows

Las siguientes son algunas de las tareas más comunes que realizan los administradores de Windows a diario. Le sorprenderá lo fácil que es administrar Windows utilizando Ansible

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

Geekflare@MSEDGEWIN10 ~

$

ansible win -m win_ping
192.168.0.102 | SUCCESS => {
 "changed": false,
 "ping": "pong"

}
Mi conexión a un host remoto tiene éxito

Así que, empecemos con Ansible Playbooks…

Copiando archivos

win_copy es un módulo ansible que copia un archivo del servidor local a un host Windows remoto. Utilizaré este módulo para copiar un único PDF

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

Geekflare@MSEDGEWIN10 ~

$

vi copy.yml
---

– hosts

: win

 tasks:

 - name: Copiar archivo

 win_copy:

 src: C:\output.pdf

 dest: C:\ansible_examples
     
 remote_src: yes

Ejecute el ansible-playbook para win_copy

Geekflare@MSEDGEWIN10 ~

$

ansible-playbook copy.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102

]



 TASK [
Copiar archivo] *****************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 i

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

ansible windows copy

Instalar/Desinstalar MSI

Para instalar una aplicación utilizando el archivo MSI, es necesario utilizar win_get_url para mencionar la ruta del archivo MSI a descargar y, a continuación, utilizar el módulo win_package para instalarlo. El estado presente significa que el MSI se instalará en la máquina y que la aplicación se encuentra en el estado presente

Aquí estoy instalando Apache

Código YAML a utilizar

Geekflare@MSEDGEWIN10 ~
$ vi msi.yml
---
- nombre: Instalando el MSI de Apache
 hosts: win
 
 tasks:
 - nombre: Descargar el instalador de Apache
 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: Instalar MSI
 win_package:
 path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi
 state: presente

Ejecute el ansible-playbook para instalar mediante MSI

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook msi.yml

PLAY [Instalando el MSI de Apache] *****************************************************************************************************************

TASK [Recopilando datos] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Descargando el instalador de Apache] *********************************************************************************************************
cambiado: [192.

168.

0.102]

TAREA [Instalar MSI] ***************************************************************************************************************************
cambiado: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 cambiado=2 inalcanzable=0 fallido=0
saltado=0 rescatado=0 ignorado=0

Ahora, vaya al sistema windows y compruebe si la aplicación apache se ha instalado 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
Versión del servidor: Apache/2.2.25 (Win32)
Server built: Jul 10 2013 01:52:12

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

Código YAML a utilizar

---

- nombre: Installar Apache MSI

 hosts: win

 tasks:

 - nombre: Descargar el instalador de Apache

 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: Instalar 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 mediante el archivo MSI, es necesario utilizar el módulo win_package. El estado ausente significa que la aplicación se desinstalará utilizando el archivo MSI

Aquí estoy desinstalando Apache

Geekflare@MSEDGEWIN10 ~

$

vi uninstall_msi.yml

---

– nombre: Desinstalar Apache

MSI

 hosts: win

 tasks:

 - nombre: Desinstalar MSI

 win_package:

 path: C:\ansible_examples\httpd-2.2.25-win32-x86-no_ssl.msi

 state:

absent
Ejecute el ansible-playbook para desinstalar mediante MSI

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook uninstall_msi.yml

PLAY [Desinstalación de Apache MSI] *****************************************************************************************************************

TASK [Recopilación de datos] ***********************************************************************************************************************
ok: [192.168.0.102]

TAREA [Desinstalar MSI] *************************************************************************************************************************
cambiado: [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 compruebo la versión de apache, obtendré la siguiente salida ya que la aplicación se ha desinstalado

C:\Program Files (x86)\Apache Software Foundation\Apache2.2\bin>httpd -v 'httpd' no se reconoce como un comando interno o externo,
programa operable o archivo por lotes

Desinstalar software (.EXE)

También puede desinstalar software con un archivo .exe utilizando el ID de producto del software

Geekflare@MSEDGEWIN10 ~

$

vi uninstall.yml
---

hosts: win

 tasks:

 - name: Desinstalar 7-Zip del 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

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook uninstall.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> *************************************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]

TAREA [Desinstalar 7-Zip del 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 los servicios de Windows

el módulo ansible win_service se utiliza para iniciar, detener o reiniciar un servicio. He aquí cómo detener el servicio tomcat

ansible windows tomcat

Necesita mencionar el nombre del servicio en el archivo YAML y establecer el estado a stop

Geekflare@MSEDGEWIN10 ~

$

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

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook service.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TAREA [Detener el servicio Tomcat] ****************************************************************************************************************
cambiado: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 cambiado=1 inalcanzable=0 fallido=0
saltado=0 rescatado=0 ignorado=0

Si comprueba el servicio tomcat en el sistema windows, ahora está en estado detenido

ansible windows tomcat stop

Puede establecer el estado en iniciado, reiniciado o pausado para cambiar el estado del servicio

Copia de datos

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

Geekflare@MSEDGEWIN10 ~
$ vi disk.yml
---
- hosts: win
 tasks:
 - name: Obtener datos del disco
 win_disk_facts:

 - name: Obtener el tamaño del primer disco
 debug:
 var: ansible_facts.disks<x><x>[0]</x></x>.size

 - name: Convierte el primer disco del sistema en varios formatos
 debug:
 msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}'
 vars:
 # Obtiene el primer disco del sistema
 disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}'

 # Mostrar el tamaño del disco en 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

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook disk.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************

TASK [Obtener datos del disco] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Obtener datos del disco] ************************************************************************************************************************
ok: [192.168.0.102]

TAREA [Obtener el tamaño del primer disco] ****************************************************************************************************************
ok: [192.168.0.102] => {

"ansible_facts.disks<x><x>[0]</x></x>.size": "1000204886016"
}

TAREA [Convertir el primer disco del sistema en varios formatos] ****************************************************************************************
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

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

Geekflare@MSEDGEWIN10 ~

$

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

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook check.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************

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\nIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK \r\r\n"
}

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=1 unreachable=0 failed=0
skipped=0 rescued=0
ignored=0

Comandos de ejecución

Sean cuales sean los comandos que se ejecuten en una ventana, pueden ejecutarse a través del módulo win_command de ansible. Sólo tiene que especificar el comando en su archivo YAML. Aquí, sólo estoy creando un directorio

Geekflare@MSEDGEWIN10 ~

$

vi commands.yml
---

hosts: win

 tasks:

 - name: ejecutar un ejecutable usando win_command

 win_command: whoami.exe


 - name: ejecutar un comando cmd

 win_command: cmd.exe /c mkdir C:\test

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

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook commands.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [ejecutar un ejecutable usando win_command] ***************************************************************************************************
cambiado: [192.

168.

0.0.102]

TAREA [ejecutar un comando cmd] *********************************************************************************************************************
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 Windows tiene múltiples variables de entorno, por ejemplo, JAVA_HOME. Utilizando el módulo ansible win_environment, puede añadir o modificar variables de entorno en un sistema windows. En este ejemplo, estoy añadiendo una nueva variable a la lista de variables de entorno de windows

Geekflare@MSEDGEWIN10 ~

$

vi env.yml
---

hosts: win
 tasks:
 - name: Establecer una variable de entorno para todos los usuarios
 win_environment:
 state: present
 name: NuevaVariable
 value: Nuevo Valor
 level: machine

Ejecute el ansible-playbook para añadir la variable de entorno en una máquina windows remota

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook env.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TAREA [Establecer una variable de entorno para todos los usuarios] *********************************************************************************************
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 añadir está presente aquí

ansible windows variables

Añadir/editar registro

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

Geekflare@MSEDGEWIN10 ~
$ vi registry.yml
---

hosts: win

 tasks:

 - name: Creación de un registro

 win_regedit:

 path: HKLM:\SOFTWARE\GeekFlare

 - name: Modificación de un registro, añadiendo nombre y datos

 win_regedit:

 path: HKLM:\SOFTWARE\GeekFlare

 name: Geek

 data: Flare

Ejecute el ansible-playbook para añadir el registro

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook registry.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> ***********************************************************************************************************************************

TASK [Recopilación de datos] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Creación de un registro] *******************************************************************************************************************
changed: [192.

168.

0.102]

TAREA [Modifierar un registro, añadir nombre y datos] ********************************************************************************************
cambiado: [192.168.0.102]

REPRODUCIR ***********************************************************************************************************************************
192.168.0.102
: ok=3 cambiado=2 inalcanzable=0 fallido=0
saltado=0 rescatado=0 ignorado=0

Si va al Editor del Registro en el sistema remoto, podrá ver que este registro se ha añadido correctamente con los parámetros Nombre y Datos

ansible windows registry

Cerrar Registro

el módulo ansible win_eventlog se utiliza para añadir, borrar o eliminar registros de eventos de Windows del sistema Windows

Vaya a Windows Powershell, y liste los EventLogs presentes en la máquina remota windows

PS C:\Usuarios\Geekflare> Get-EventLog -List
 Max(K) Retener Entradas OverflowAction Log
 ------ -------------- ------- ---
 20,480 0 SobrescribirComoNecesario 33,549 Aplicación
 20,480 0 SobrescribirComoNecesario 0 HardwareEvents
 512 7 SobrescribirComoNecesario 20 Internet Explorer
 20,

480 0

SobrescribirComoNecesario 0 Key Management Service
 128 0 SobrescribirComoNecesario 190 OAlerts
 Security
 20,480 0 SobrescribirComoNecesario 44,828 System
 15,360 0 SobrescribirComoNecesario 3,662 Windows PowerShell

Ahora, voy a mostrar cómo eliminar los registros de todas las fuentes para Internet Explorer

Geekflare@MSEDGEWIN10 ~

$

vi log.yml
---

hosts: win
 tasks:
 - name: Remove Internet Explorer Logs
 win_eventlog:
 name: Internet Explorer
 state: absent

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


Geekflare@MSEDGEWIN10 ~

$

ansible-playbook log.yml

PLAY <x><x><x><x><x><x><x><x><x><x><x><x><x><x><x><x>[win]</x></x></x></x></x></x></x></x></x></x></x></x></x></x></x></x> *************************************************************************************************************************************************************************************

TASK

[Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]

TASK

[Remove Internet Explorer Logs] **********************************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************************************

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

PS C:\Usuarios\Geekflare> Get-EventLog -List

 Max(K) Retain OverflowAction Entries Log
 ------ -------------- ------- ---
 20,480 0 OverwriteAsNeeded 33,549 Application
 20,480 0 OverwriteAsNeed 0 HardwareEvents
 20,

480 0 SobrescribirComoNecesario 0

Key Management Service
 128 0 SobrescribirComoNecesario 190 OAlerts
 Security
 20,480 0 SobrescribirComoNecesario 44,835 System
 15,360 0 SobrescribirComoNecesario 56 Windows PowerShell

Así que, eso fue todo acerca de los playbooks de Ansible, que pueden ser utilizados para la administración remota de Windows. Siga adelante y pruebe estos playbooks. También puede probar otros módulos disponibles de Ansible para Windows.

  • Avi
    Autor
    Avi es un entusiasta de la tecnología con experiencia en tecnologías de tendencia como DevOps, Cloud Computing, Big Data y muchas más. Le apasiona aprender tecnologías de vanguardia y compartir sus conocimientos con los demás a través de... Seguir leyendo
Gracias a nuestros patrocinadores
Más lecturas sobre DevOps
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder