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