Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

9 Beispiel für Ansible Playbooks für die Windows-Administration

ansible Zertifizierungsprüfungen
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

Ich werde Ihnen verschiedene Vorgänge zeigen, die ein Administrator mit ansible-playbook auf einem Remote-Windows-System ausführen kann.

Ansible ist eines der am häufigsten verwendeten DevOps-Tools auf dem heutigen Markt. Es enthält eine Reihe von Windows-Modulen, mit denen der Windows-Server konfiguriert und verwaltet wird. Ich nehme an, Sie haben bereits Ansible unter Windows installiert von wo aus Sie die Windows-Server verwalten möchten.

Im Folgenden sind einige der häufig verwendeten Aufgaben aufgeführt, die von Windows-Administratoren täglich ausgeführt werden. Sie werden erstaunt sein, wie einfach die Verwaltung von Windows mit Ansible ist.

Die IP-Adresse meines Ansible Windows-Controller-Computers lautet 192.168.0.106 und die IP-Adresse meines Remote-Windows-Systems lautet 192.168.0.102. Bevor Sie beginnen, stellen Sie sicher, dass Sie a ausführen win_ping Modul, um zu überprüfen, ob Sie eine Verbindung zum Windows-Remoteserver herstellen können oder nicht.

Geekflare@MSEDGEWIN10 ~
$ ansible win -m win_ping
192.168.0.102 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Meine Verbindung zu einem Remote-Host ist erfolgreich.

Beginnen wir also mit Ansible Playbooks…

Copying Files

win_copy ist ein ansibles Modul, das eine Datei vom lokalen Server auf einen Remote-Windows-Host kopiert. Ich werde dieses Modul verwenden, um ein einzelnes PDF zu kopieren.

Verwenden Sie den folgenden YAML-Code und geben Sie die Quell- und Zielpfade an.

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

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:\output.pdf

      dest: C:\ansible_examples\
     
      remote_src: yes

Führen Sie das Ansible-Playbook für win_copy aus.

Geekflare@MSEDGEWIN10 ~
$ 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

Die Datei wurde erfolgreich am Zielspeicherort auf einem Remote-Windows-System kopiert.

ansible Windows-Kopie

Install/UnInstall MSI

Um eine Anwendung mithilfe der MSI-Datei zu installieren, müssen Sie verwenden win_get_url um den Pfad der MSI-Datei zu erwähnen, die heruntergeladen und dann verwendet werden soll win_paket Modul, um es zu installieren. Der Status "Vorhanden" bedeutet, dass die MSI auf dem Computer installiert wird und sich die Anwendung im aktuellen Status befindet.

Hier installiere ich Apache.

Zu verwendender YAML-Code:

Geekflare@MSEDGEWIN10 ~
$ 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

Führen Sie das Ansible-Playbook aus, um es mit MSI zu installieren.

Geekflare@MSEDGEWIN10 ~
$ 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

Gehen Sie nun zum Windows-System und überprüfen Sie, ob die Apache-Anwendung erfolgreich installiert wurde.

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

Sie können Anwendungen auch mithilfe von MSI mit Argumenten installieren. Unten ist das gleiche Beispiel wie oben, aber anstelle eines Status verwenden wir ein Installationsargument, um Apache zu installieren.

Zu verwendender YAML-Code:

---

- 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

Um eine Anwendung mithilfe der MSI-Datei zu deinstallieren, müssen Sie die verwenden win_paket Modul. Der Status abwesend bedeutet, dass die Anwendung mithilfe der MSI-Datei deinstalliert wird.

Hier deinstalliere ich Apache.

Geekflare@MSEDGEWIN10 ~
$ 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

Führen Sie das Ansible-Playbook aus, um es mit MSI zu deinstallieren.

Geekflare@MSEDGEWIN10 ~
$ 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

Wenn ich jetzt die Apache-Version überprüfe, erhalte ich die folgende Ausgabe, wenn die Anwendung deinstalliert wurde.

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.

Uninstall Software (.EXE)

Sie können Software auch mit der EXE-Datei unter Verwendung der Produkt-ID dieser Software deinstallieren.

Geekflare@MSEDGEWIN10 ~
$ 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

Führen Sie das Ansible-Playbook aus, um 7-Zip zu deinstallieren.

Geekflare@MSEDGEWIN10 ~
$ 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

Stop/Start/Restart Windows Services

win_service Das Ansible-Modul wird zum Starten, Stoppen oder Neustarten eines Dienstes verwendet. Hier zeige ich Ihnen, wie Sie den Tomcat-Dienst beenden können.

ansible Windows Tomcat

Sie müssen den Dienstnamen in der YAML-Datei erwähnen und den Status auf Stopp setzen.

Geekflare@MSEDGEWIN10 ~
$ vi service.yml
---
- hosts: win 

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Führen Sie das Ansible-Playbook aus, um den Tomcat-Dienst zu beenden.

Geekflare@MSEDGEWIN10 ~
$ 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

Wenn Sie den Tomcat-Dienst auf dem Windows-System überprüfen, befindet er sich jetzt im Status "Gestoppt".

ansible Windows Tomcat Stop

Sie können den Status definieren, der gestartet oder neu gestartet oder angehalten werden soll, um den Status des Dienstes zu ändern.

Gathering Facts

Die win_disk_facts Mit dem Ansible-Modul können Sie alle Festplatteninformationen des Zielhosts abrufen.

Geekflare@MSEDGEWIN10 ~
$ 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'

Führen Sie das Ansible-Playbook aus, um die Festplatteninformationen abzurufen.

Geekflare@MSEDGEWIN10 ~
$ 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

Die win_command Mit dem Ansible-Modul können Sie Befehle auf dem Remote-Host ausführen und CPU-Informationen, Gerätedetails und vieles mehr abrufen.

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 }}"

Führen Sie das Ansible-Playbook aus, um Informationen zum Remote-System abzurufen.

Geekflare@MSEDGEWIN10 ~
$ 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

Running Commands

Unabhängig davon, welche Befehle Sie in einem Fenster ausführen, können sie über das Ansible ausgeführt werden win_command Modul. Sie müssen nur den Befehl in Ihrer YAML-Datei angeben. Hier erstelle ich gerade ein Verzeichnis.

Geekflare@MSEDGEWIN10 ~
$ 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

Führen Sie das Ansible-Playbook aus, um die Operation win_command auszuführen.

Geekflare@MSEDGEWIN10 ~
$ 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

Environment Variables

Ein Windows-System verfügt über mehrere Umgebungsvariablen, z. B. JAVA_HOME. Verwendung der win_environment Ansible Modul können Sie Umgebungsvariablen auf einem Windows-System hinzufügen oder ändern. In diesem Beispiel füge ich der Liste der Windows-Umgebungsvariablen eine neue Variable hinzu.

Geekflare@MSEDGEWIN10 ~
$ 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

Führen Sie das Ansible-Playbook aus, um die Umgebungsvariable auf einem Remote-Windows-Computer hinzuzufügen.

Geekflare@MSEDGEWIN10 ~
$ 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

Gehen Sie zum Fenster Umgebungsvariablen. Sie werden sehen, dass die neue Variable, die Sie gerade hinzugefügt haben, hier vorhanden ist.

ansible Windows-Variablen

Add/Edit Registry

win_regedit Das Ansible-Modul wird zum Hinzufügen oder Bearbeiten von Registrierungsdetails auf einem Remote-Windows-Computer verwendet. Sie müssen den Pfad der Registrierung und den Inhalt angeben, der hinzugefügt / aktualisiert werden soll. Hier erstelle ich einen neuen Registrierungseintrag GeekFlare im Pfad HKLM: \ SOFTWARE und füge dieser Registrierung dann Namen und Daten hinzu.

Geekflare@MSEDGEWIN10 ~
$ 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

Führen Sie das Ansible-Playbook aus, um die Registrierung hinzuzufügen.

Geekflare@MSEDGEWIN10 ~
$ 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

Wenn Sie auf dem Remote-System zum Registrierungseditor wechseln, können Sie sehen, dass diese Registrierung mit den Parametern Name und Daten erfolgreich hinzugefügt wurde.

ansible Windows-Registrierung

Delete Log

win_eventlog Das Ansible-Modul wird zum Hinzufügen, Löschen oder Entfernen von Windows-Ereignisprotokollen zum Windows-System verwendet.

Gehen Sie zu Windows Powershell und listen Sie die EventLogs auf, die auf dem Remote-Windows-Computer vorhanden sind.

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

Jetzt werde ich zeigen, wie Protokolle aus allen Quellen für Internet Explorer entfernt werden.

Geekflare@MSEDGEWIN10 ~
$ vi log.yml
---
- hosts: win 
  tasks:
   - name: Remove Internet Explorer Logs
     win_eventlog:
      name: Internet Explorer
      state: absent

Führen Sie das Ansible-Playbook aus, um den Internet Explorer vom Remote-Windows-Computer zu entfernen.

Geekflare@MSEDGEWIN10 ~
$ 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

Wenn Sie nun die EventLogs erneut auflisten, werden Internet Explorer-Protokolle entfernt.

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

Das war also alles über Ansible-Playbooks, die für die Remote-Windows-Verwaltung verwendet werden können. Probieren Sie diese Spielbücher aus. Sie können auch andere ausprobieren Ansible Windows-Module erhältlich.

Danke an unsere Sponsoren
Weitere großartige Lektüre zu DevOps
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder