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吧。您还可以尝试其他可用的链接。