9个用于Windows管理的Ansible Playbooks示例

我将向您展示使用ansible-playbook在远程Windows系统上执行的几个管理员操作。

Ansible是市场上最常用的DevOps工具之一。它提供了一堆用于配置和管理Windows服务器的Windows模块。我假设您已经具备从中管理Windows服务器的工具。

以下是Windows管理员每天执行的一些常用任务。您会惊讶地发现使用Ansible来管理Windows是多么容易。

我的Ansible Windows控制器机器IP地址是192.168.0.106,我的远程Windows系统IP地址是192.168.0.102。在开始之前,请确保运行win_ping模块来检查是否能够连接到Windows远程服务器。

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

我成功连接到远程主机。

那么,让我们开始使用Ansible Playbooks…

复制文件

win_copy是一个ansible模块,用于将文件从本地服务器复制到远程Windows主机。我将使用此模块复制单个PDF文件。

使用下面的YAML代码,给出源路径和目标路径。

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

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

运行ansible-playbook以进行win_copy。

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

文件已成功复制到远程Windows系统的目标位置。

安装/卸载MSI

要使用MSI文件安装应用程序,您需要使用win_get_url指定MSI文件的下载路径,然后使用win_package模块进行安装。状态present表示MSI将安装在计算机上,应用程序处于现有状态。

这里,我正在安装Apache。

要使用的YAML代码:

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_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

    - name: Install MSI
      win_package: 
        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi
        state: present

运行ansible-playbook以使用MSI进行安装。

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook msi.yml

执行 [安装 Apache MSI] *****************************************************************************************************************

任务 [收集信息] ***********************************************************************************************************************
ok: [192.168.0.102]

任务 [下载 Apache 安装程序] *********************************************************************************************************
changed: [192.168.0.102]

任务 [安装 MSI] ***************************************************************************************************************************
changed: [192.168.0.102]

重播一下 ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

现在,转到 Windows 系统并检查 Apache 应用程序是否成功安装。

C:Usersyaoweibin>cd C:Program Files (x86)Apache Software FoundationApache2.2bin
C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v
服务器版本: Apache/2.2.25 (Win32)
构建服务器: Jul 10 2013 01:52:12

您还可以使用带有参数的 MSI 安装应用程序。以下是与上面相同的示例,但我们使用 install 参数来安装 Apache。

要使用的 YAML 代码:

---

- 名称: 安装 Apache MSI 

  主机: win 

  任务:

    - 名称: 下载 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_exampleshttpd-2.2.25-win32-x86-no_ssl.msi


    - 名称: 安装 MSI

      win_package: 

        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

        arguments:

          - /install

          - /passive

          - /norestart

要使用 MSI 文件卸载应用程序,您需要使用 win_package 模块。状态 absent 表示将使用 MSI 文件卸载应用程序。

在这里,我正在卸载 Apache。

Geekflare@MSEDGEWIN10 ~
$ vi uninstall_msi.yml

---

- 名称: 卸载 Apache MSI 

  主机: win 

  任务:

    - 名称: 卸载 MSI

      win_package: 

        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

        state: absent

运行 ansible-playbook 以使用 MSI 卸载。

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook uninstall_msi.yml

执行 [卸载 Apache MSI] *****************************************************************************************************************

任务 [收集信息] ***********************************************************************************************************************
ok: [192.168.0.102]

任务 [卸载 MSI] *************************************************************************************************************************
changed: [192.168.0.102]

重播一下 ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

现在,如果我检查 Apache 版本,我将得到以下输出,因为应用程序已卸载。

C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v 'httpd' 不是内部或外部命令,也不是可运行的程序或批处理文件。

卸载软件 (.EXE)

您还可以使用软件的 .exe 文件和该软件的产品 ID 来卸载软件。

运行ansible-playbook以获取磁盘信息。

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook disk.yml

播放[win] ***********************************************************************************************************************************

任务[收集事实] ***********************************************************************************************************************
好:[192.168.0.102]

任务[获取磁盘信息] ************************************************************************************************************************
好:[192.168.0.102]

任务[输出第一个磁盘大小] ****************************************************************************************************************
好:[192.168.0.102] => {

"ansible_facts.disks[0].size": "1000204886016"
}

任务[将第一个系统磁盘转换为各种格式] ****************************************************************************************
好:[192.168.0.102] => {
"msg": "932 GiB vs 931.5 GiB"
}

播放总结 ***********************************************************************************************************************************
192.168.0.102
: 好=4 更改=0 不可达=0 失败=0
跳过=0 营救=0 忽略=0

使用win_command ansible模块,您可以在远程主机上执行命令并获取CPU信息、设备详细信息等等。

Geekflare@MSEDGEWIN10 ~
$ vi check.yml
---
- hosts: win 
  tasks:
   - name: 获取磁盘信息
     win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status
     register: usage

   - debug: msg="{{ usage.stdout }}"

运行ansible-playbook以获取远程系统信息。

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook check.yml

播放[win] ***********************************************************************************************************************************

任务[收集事实] ***********************************************************************************************************************
好:[192.168.0.102]

任务[获取事实] ***********************************************************************************************************************
已更改:[192.168.0.102]

任务[debug] *********************************************************************************************************************************
好:[192.168.0.102] => {
"msg": "Caption DeviceID MaxClockSpeed
Name
NumberOfCores Status rrnIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK rrnrrn"
}

播放总结 ***********************************************************************************************************************************
192.168.0.102
: 好=3 更改=1 不可达=0 失败=0
跳过=0 营救=0 忽略=0

运行命令

无论您在窗口上运行什么命令,都可以通过ansible win_command模块运行。您只需要在YAML文件中指定命令。这里,我只是创建了一个目录。

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

- hosts: win 

  tasks:

   - name: 使用win_command运行可执行文件

     win_command: whoami.exe


   - name: 运行cmd命令

      win_command: cmd.exe /c mkdir C:test

运行ansible-playbook执行win_command操作。

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

环境变量

Windows系统具有多个环境变量,例如JAVA_HOME。使用win_environment ansible模块,您可以在Windows系统上添加或修改环境变量。在此示例中,我正在将一个新变量添加到Windows环境变量列表中。

Geekflare@MSEDGEWIN10 ~
$ vi env.yml
---
- hosts: win 
  tasks:
   - name: 为所有用户设置环境变量
     win_environment:
       state: present
       name: NewVariable
       value: New Value
       level: machine

运行ansible-playbook在远程Windows机器上添加环境变量。

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook env.yml

PLAY [win] ***********************************************************************************************************************************

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

TASK [为所有用户设置环境变量] *********************************************************************************************
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

转到环境变量窗口,您将看到您刚刚添加的新变量存在于此处。

添加/编辑注册表

使用win_regedit ansible模块可以在远程Windows机器上添加或编辑注册表详细信息。您需要提供注册表的路径和要添加/更新的内容。在这里,我在HKLM:SOFTWARE路径下创建了一个名为GeekFlare的新注册表条目,然后将名称和数据添加到该注册表中。

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

- hosts: win 

  tasks:

   - name: 创建注册表

     win_regedit:

      path: HKLM:SOFTWAREGeekFlare

   - name: 修改注册表,添加名称和数据

     win_regedit:

      path: HKLM:SOFTWAREGeekFlare

      name: Geek

      data: Flare

运行ansible-playbook以添加注册表。

如果您在远程系统上打开注册表编辑器,您可以看到成功添加了该注册表,并带有名称和数据参数。

删除日志

win_eventlogansible模块用于在Windows系统上添加、清除或删除Windows事件日志。

转到Windows Powershell,并列出远程Windows机器上存在的EventLogs。

PS C:UsersGeekflare> 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

现在,我将展示如何从所有来源中删除Internet Explorer的日志。

Geekflare@MSEDGEWIN10 ~
$ vi log.yml

– hosts: win
tasks:
– name: 删除Internet Explorer日志
win_eventlog:
name: Internet Explorer
state: absent

运行ansible-playbook以从远程Windows机器中删除Internet Explorer。

Geekflare@MSEDGEWIN10 ~
$ ansible-playbook log.yml

PLAY [win] *********************************************************************

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

TASK [删除Internet Explorer日志] ******************************************************
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

现在,如果再次列出EventLogs,您将会看到Internet Explorer的日志已被删除。
所以,这就是关于Ansible playbooks的全部内容,可以用于远程Windows管理。试试这些playbooks吧。您还可以尝试其他可用的链接。

类似文章