在之前的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,所以都是满足的。
Windows 2008 R2
1.下载framework 4.5.2以上。
这里我选择的是4.6.1,自行互联网下载。(下面相关软件我会打包放在一起)
2.升级powershell
目前官方提供的是WMF5.1版本。安装完成后需要重启才行。
3.查看版本信息。
$PSVersionTable
升级成功
开启远程功能
1.查看powershell执行策略(需要管理员权限运行)
默认应该是Restricted,需要改为remotesigned,这么做有什么意义?如果不改为该值会出现PS脚本无法执行。
get-executionpolicy set-executionpolicyremotesigned
遇到这样的报错证明没有用管理员身份运行
输入Y即可
2.启动远程管理功能。
启动远程管理服务(winrm),输入y即可
winrmquickconfig
3.启用认证。
winrmsetwinrm/config/service/auth'@{Basic="true"}' winrmsetwinrm/config/service'@{AllowUnencrypted="true"}'
Ansible连接测试
1.安装pywinrm,此处出问题的朋友估计是pip工具没有或者其他原因,自行互联网搜索
pip3installpywinrm
2.编写ansible hosts文件
vi/etc/ansible/hosts [window] 192.168.31.82 [window:vars] ansible_ssh_user="Administrator" ansible_ssh_pass="123.com" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore
3.ansible ping 测试
ansiblewindow-mwin_ping
PS脚本
下面的脚本粘贴到.ps1后缀的文件里(文件自行创建)
这里需要注意的是在获取文件的时候注意版本,这里我采用的是Zabbix 5.4的agent v2版本,如果你的版本非次版本,则需要去官网查看,如下面的图二和图三,另外agent2和agent也有所区别,如果懒癌的朋友可以找我要不同版本对应的脚本,否则执行会报错,我相信大家都会一点powershell的语法,毕竟我们都是站在巨人的肩膀上。
mkdirC:\zabbix invoke-webrequest-urihttps://cdn.zabbix.com/zabbix/binaries/stable/5.4/5.4.2/zabbix_agent2-5.4.2-windows-amd64-openssl-static.zip-outfileC:\zabbix\zabbix-win.zip $file="C:\zabbix\zabbix-win.zip" $shell=New-Object-ComObjectshell.application $zip=$shell.NameSpace($file) $dest=$shell.NameSpace((Split-Path$file-Parent)) $dest.CopyHere($zip.Items()) Copy-ItemC:\zabbix\bin\*.exeC:\zabbix\ Copy-ItemC:\zabbix\conf\*.confC:\zabbix\ Rename-ItemC:\zabbix\zabbix_agent2.confzabbix_agentd.conf Rename-ItemC:\zabbix\zabbix_agent2.exezabbix_agentd.exe Remove-ItemC:\zabbix\zabbix-win.zip $conf=Get-ContentC:\zabbix\zabbix_agentd.conf-EncodingUTF8 $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=Windowshost","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) cdC:\zabbix\ .\zabbix_agentd.exe-i-cC:\zabbix\zabbix_agentd.conf .\zabbix_agentd.exe-s-czabbix_agentd.conf
选择zip包
下载地址
推送脚本并安装
1.编写playbook,一定要注意格式
--- -hosts:window tasks: -name:pull win_copy:'src=/root/install.ps1dest=c:/' -name:install win_shell:"c:/install.ps1"
2.执行playbook
ansible-playbookwindow.yml
执行效果
Zabbix前端操作
由于此前在Linux篇已经讲过了,此处不再细讲,下图代表条件为主机名包含K进行自动注册,动作为添加主机、添加到主机组、链接到模板。
遇到的问题
如果在测试过程中遇到下列问题,大概率是防火墙的问题,需要放开入方向10050端口或者采用主动模式即可,另外在08以后的版本可以通过powershell关闭,这里不再演示,我会在附件里提供。
最终效果
Windows 2008 R2
ansible推送剩下的Windows机器
转载请注明:IT运维空间 » 运维技术 » Zabbix由浅入深之主机自动化注册(Windows篇)
发表评论