在之前的 Linux 篇提到了自动化安装的原理其实也是脚本安装,只不过安装部分省去了部分人力重复工作,但是 Windows 比较特殊,需要用到 powershell 这款自带的软件,这款软件在 Windows 2008 版本引入后,开启了 Windows 自动化的旅程,由此拉开了 Windows 命令行的序幕,题外话就不提了,如果感兴趣可以参考官方文档,最新的 7.0 还是比较强大的。
整体思路是通过通过 ansible 远程到 Windows 主机,推送 powershell 脚本,Windows 执行 powershell 脚本自动拉取 agent 文件、替换配置、启动一系列操作。
由于 Ansible 到 Windows 需要主机 powershell 版本为3.0以上,如果不是 3.0 的 powershell 需要进行升级,需要注意的是 Windows 2008 R2 后的版本(不包含 Windows 2008 R2 以前的版本)起步是 4.0,所以都是满足的。
1.下载 framework 4.5.2 版本及以上这里我选择的是 4.6.1,自行互联网下载。(下面相关软件我会打包放在一起)
2.升级 Powershell目前官方提供的是 WMF 5.1 版本。安装完成后需要重启才行。
3.查看版本信息
1.查看 powershell 执行策略(需要管理员权限运行)默认应该是 Restricted,需要改为 remotesigned,这么做有什么意义?如果不改为该值会出现 PS 脚本无法执行。
2.启动远程管理功能启动远程管理服务(winrm),输入 y 即可
3.启用认证
1.安装 pywinrm,此处出问题的朋友估计是 pip 工具没有或者其他原因,自行互联网搜索
2.编写 ansible hosts 文件
3.ansible ping 测试
下面的脚本粘贴到 .ps1 后缀的文件里(文件自行创建)
这里需要注意的是在获取文件的时候注意版本,这里我采用的是 Zabbix 5.4 的 agent v2 版本,如果你的版本非次版本,则需要去官网查看,如下面的图二和图三,另外 agent2 和 agent 也有所区别,如果懒癌的朋友可以找我要不同版本对应的脚本,否则执行会报错,我相信大家都会一点 powershell 的语法,毕竟我们都是站在巨人的肩膀上。
mkdir C:\zabbix
invoke-webrequest -uri https://cdn.zabbix.com/zabbix/binaries/stable/5.4/5.4.2/zabbix_agent2-5.4.2-windows-amd64-openssl-static.zip -outfile C:\zabbix\zabbix-win.zip
$file = "C:\zabbix\zabbix-win.zip"
$shell = New-Object -ComObject shell.application
$zip = $shell.NameSpace($file)
$dest = $shell.NameSpace((Split-Path $file -Parent))
$dest.CopyHere($zip.Items())
Copy-Item C:\zabbix\bin\*.exe C:\zabbix\
Copy-Item C:\zabbix\conf\*.conf C:\zabbix\
Rename-Item C:\zabbix\zabbix_agent2.conf zabbix_agentd.conf
Rename-Item C:\zabbix\zabbix_agent2.exe zabbix_agentd.exe
Remove-Item C:\zabbix\zabbix-win.zip
$conf= Get-Content C:\zabbix\zabbix_agentd.conf -Encoding UTF8
$conf= $conf.Replace("LogFile=c:\zabbix_agentd.log", "LogFile=c:\zabbix\zabbix_agentd.log")
$conf= $conf.Replace("Server=127.0.0.1", "Server=192.168.31.137")
$conf= $conf.Replace("ServerActive=127.0.0.1", "ServerActive=192.168.31.137:10051")
$conf= $conf.Replace("Hostname=Windows host", "Hostname=${Env:COMPUTERNAME}")
#$conf= $conf.Replace("# HostnameItem=system.hostname", "HostnameItem=system.hostname")
$conf= $conf.Replace("# HostMetadata=", "HostMetadata=")
[IO.File]::WriteAllLines("C:\zabbix\zabbix_agentd.conf", $conf)
cd C:\zabbix\
.\zabbix_agentd.exe -i -c C:\zabbix\zabbix_agentd.conf
.\zabbix_agentd.exe -s -c zabbix_agentd.conf
1.编写 playbook,一定要注意格式
2.执行 playbook
由于此前在 Linux 篇已经讲过了,此处不再细讲,下图代表条件为主机名包含 K 进行自动注册,动作为添加主机、添加到主机组、链接到模板。
如果在测试过程中遇到下列问题,大概率是防火墙的问题,需要放开入方向10050端口或者采用主动模式即可,另外在 2008 以后的版本可以通过 powershell 关闭,这里不再演示,我会在附件里提供。
其实整体来讲,Windows 的操作相对较复杂,因为需要手动开启远程的一些功能,所以与其说是自动化倒不如说是脚本安装更为合适,只不过可以批量,也许是我才疏学浅,还有更好的方式去实现,但思想应该是没错的,只不过是换种更简便的方式,那么自动化注册部分到这里该结束了,如果您有想了解的内容欢迎留言,我会尽量出全