之前Linux篇中提到自动化安装的原理其实就是脚本安装,只是安装部分省去了一些手工工作,但是Windows比较特殊,需要使用转到内置软件powershell。Windows2008推出后,这款软件开启了Windows自动化的征程,拉开了Windows命令行的序幕。题外话我就不提了。有兴趣的可以参考官方Documentation,最新的7.0还是比较强大的。文idea的整体思路是通过ansible远程到Windows主机,推送powershell脚本,Windows执行powershell脚本自动拉取agent文件,替换配置,启动一系列操作。准备工作AnsibleremotetoWindows要求主机powershell版本为3.0或以上。如果powershell版本不是3.0,需要升级。需要注意的是,Windows2008R2之后的版本(不包括Windows2008R2之前的版本)都是4.0开始的,所以都满意。视窗2008R21。下载框架4.5.2或更高版本。这里我选择4.6.1,从网上下载。(下面我会把相关软件打包放在一起)2.升级powershell目前官方版本是WMF5.1。安装完成后,需要重新启动。3.查看版本信息。$PSVersionTable升级成功启用远程功能。1、查看powershell执行策略(需要管理员权限运行)。默认应该是Restricted,需要改成remotesigned。这样做的意义何在?如果不更改此值,则无法执行PS脚本。get-executionpolicyset-executionpolicyremotesigned遇到这样的错误证明不是以管理员身份运行输入Y。2.启动远程管理功能。启动远程管理服务(winrm),在winrmquickconfig3中输入y。启用身份验证。winrmsetwinrm/config/service/auth'@{Basic="true"}'winrmsetwinrm/config/service'@{AllowUnencrypted="true"}'Ansible连接测试1.安装pywinrm,遇到这里问题的朋友大概是piptool没有或者其他原因,上网搜索pip3installpywinrm2。编写ansible主机文件vi/etc/ansible/hosts[window]192.168.31.82[window:vars]ansible_ssh_user="Administrator"ansible_ssh_pass="123.com"ansible_ssh_port=5985ansible_connection="winrm"ansible_winrm_server_cert_validation=ignore3.ansibleping测试ansiblewindow-mwin_pingPS脚本下面的脚本粘贴到后缀为.ps1的文件中(文件是自己创建的)。这里需要注意的是,在获取文件的时候,要注意版本。这里我使用的是Zabbix5.4v2版本的代理,如果你的版本不是二级版本,需要去官网查看,如下图2和图3所示。另外,agent2和agent也有区别。偷懒的可以向我要不同版本对应的脚本,否则执行会报错。powershell语法相信大家都会略知一二。毕竟,我们都是站在巨人的肩膀上。mkdirC:\zabbixinvoke-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.confRename-ItemC:\zabbix\zabbix_agent2.exezabbix_agentd.exeRemove-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。替换("#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:windowtasks:-name:pullwin_copy:'src=/root/install.ps1dest=c:/'-name:installwin_shell:"c:/install.ps1"2.执行playbookansible-playbookwindow.yml执行效果Zabbix前端运行有之前在Linux章节已经提到过,这里就不赘述了。下图表示主机名包含K自动注册的情况,动作为添加主机、添加主机组、链接模板。遇到的问题如果在测试过程中遇到以下问题,最有可能是防火墙的问题,需要在入方向释放10050端口或者使用主动模式。另外08以后的版本可以通过powershell关闭。这里就不演示了,我会在附件中提供。最后的结果是,Windows2008R2ansible力压其余的Windows机器。其实总体来说Windows的操作还是比较复杂的,因为有些远程功能需要手动开启,所以脚本安装比自动化更合适。只是可以分批进行,可能我不是很懂,还有更好的方法,但是思路应该是对的,只是比较简单的方法,所以自动注册的部分到这里就结束了。