• Erledigen Sie die Anwendungssicherheit auf die richtige Weise! Erkennen, schützen, überwachen, beschleunigen und mehr…
  • 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.

    [email protected] ~
    $ 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…

    Dateien kopieren

    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.

    [email protected] ~
    $ 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.

    [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

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

    ansible Windows-Kopie

    MSI installieren / deinstallieren

    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_package 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:

    [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

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

    Geekfl[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

    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_package Modul. Der Status abwesend bedeutet, dass die Anwendung mithilfe der MSI-Datei deinstalliert wird.

    Hier deinstalliere ich 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

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

    [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

    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.

    Software deinstallieren (.EXE)

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

    [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

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

    [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

    Beenden / Starten / Neustarten der Windows-Dienste

    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.

    [email protected] ~
    $ 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.

    [email protected]SEDGEWIN10 ~
    $ 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.

    Fakten sammeln

    Es ist recht schwierig viele Produkte gleichzeitig zu verwenden und auch hintereinander aufzutragen. Die Wirkstoffe können nicht alle gleichzeitig aufgenommen werden und die Haut ist schließlich überfordert. Die Folge könnten Hautrötungen und Unverträglichkeiten sein. win_disk_facts Mit dem Ansible-Modul können Sie alle Festplatteninformationen des Zielhosts abrufen.

    [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'

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

    [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

    Es ist recht schwierig viele Produkte gleichzeitig zu verwenden und auch hintereinander aufzutragen. Die Wirkstoffe können nicht alle gleichzeitig aufgenommen werden und die Haut ist schließlich überfordert. Die Folge könnten Hautrötungen und Unverträglichkeiten sein. 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.

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

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

    [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

    Befehle ausführen

    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.

    [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

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

    [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

    Umgebungsvariablen

    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.

    [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

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

    [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

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

    ansible Windows-Variablen

    Registrierung hinzufügen / bearbeiten

    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.

    [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

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

    [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

    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

    Protokoll löschen

    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.

    [email protected] ~
    $ 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.

    [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

    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.