最近公司新項目須要安裝400+windows server 2012系統的工做站,想着怎麼能像linux下運用ansible批量管理,linux就很簡單了有ssh服務html
可是下卻沒這麼簡單,但仍是有辦法那就是Powershell。node
Ansible可用於管理Windows集羣,不過管理節點須要部署在Linux機器上,並且須要預裝python winrm模塊。python
同時,Windows機器上的powershell版本須要知足3.0+,且Management Framework也須要知足3.0+版本。linux
1、首先在Powershell窗口執行get-host命令查看版本web
2、配置winrm服務redis
Windows上winrm服務默認是未啓用的,使用以下命令能夠查看狀態。shell
winrm enumerate winrm/config/listener
使用以下命令配置winrm服務windows
winrm quickconfig winrm set winrm/config/service/auth '@{Basic="true"}' winrm set winrm/config/service '@{AllowUnencrypted="true"}'
至此,windows主機的配置就完成了,接下來咱們配置linux管理節點進行驗證。
3、Linux管理節點配置網絡
1.而後須要使用pip安裝pywinrm模塊。若是沒有安裝pip,則先參考python分類博文安裝並配置pip。app
[root@cmdb-server ansible]# pip install "pywinrm>=0.2.2"
2.配置hosts文件
[wind] 192.168.247.151 ansible_ssh_user="Administrator" ansible_ssh_pass="NPS#2018" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore
3.而後使用以下命令進行驗證,咱們看到,此時可使用win_ping模塊連到以前配置的windows主機上了。
[root@cmdb-server ansible]# ansible wind -m win_ping 192.168.247.151 | SUCCESS => { "changed": false, "ping": "pong" }
4.遠程推送文件
[root@cmdb-server ansible]# ansible wind -m win_copy -a 'src=/etc/ansible/PreventCopy.jar dest=C:\' 192.168.247.151 | SUCCESS => { "changed": true, "checksum": "c3da689273ec80f8072573b73dd87d3bc68e0395", "dest": "'C:\\PreventCopy.jar'", "operation": "file_copy", "original_basename": "PreventCopy.jar", "size": 62463090, "src": "/etc/ansible/PreventCopy.jar" }
5.刪除遠程文件
[root@cmdb-server ansible]# ansible wind -m win_file -a "path=C:\PreventCopy.jar state=absent" 192.168.247.151 | SUCCESS => { "changed": true }
更多模塊及詳細功能介紹:https://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html除win開頭的模塊外,scripts,raw,slurp,setup模塊在Windows 下也可正常使用。
Windows下可用模塊雖不及Linux豐富,但基礎功能均包括在內,如下幾個模塊爲經常使用模塊: win_acl (E) —設置文件/目錄屬主屬組權限; win_copy—拷貝文件到遠程Windows主機; win_file —建立,刪除文件或目錄; win_lineinfile—匹配替換文件內容; win_package (E) —安裝/卸載本地或網絡軟件包; win_ping —Windows系統下的ping模塊,經常使用來測試主機是否存活; win_service—管理Windows Services服務; win_user —管理Windows本地用戶。 window的通訊檢測爲:ansible testwin -m win_ping 複製文件到window: ansible windows -m win_copy -a "src=/etc/passwd dest=E:filepasswd" 刪除文件: ansible windows -m win_file -a "path=E:filepasswd state=absent" 新增用戶: ansible windows -m win_user -a "name=stanley password=magedu@123 groups=Administrators" 重啓服務: ansible windows -m win_service -a "name=spooler state=restarted" 獲取window主機信息: ansible windows -m setup 執行ps腳本: ansible windows -m script -a "E://test.ps1" 獲取IP地址: ansible windows -m win_command -a "ipconfig" 查看文件狀態: ansible windows -m win_stat -a "path='C://Windows/win.ini'" 移動文件: ansible windows -m raw -a "cmd /c 'move /y d:\issue c:\issue'" 建立文件夾: ansible windows -m raw -a "mkdir d:\tst" 重啓: ansible windows -m win_reboot 結束程序: ansible windows-m raw -a "taskkill /F /IM QQ.exe /T" 若是window主機傳回來的中文是亂碼,則修改ansible控制機上的python編碼: sed -i "s#tdout_buffer.append(stdout)#tdout_buffer.append(stdout.decode('gbk').encode('utf-8'))#g" /usr/lib/python2.6/site-packages/winrm/protocol.py sed -i "s#stderr_buffer.append(stderr)#stderr_buffer.append(stderr.decode('gbk').encode('utf-8'))#g" /usr/lib/python2.6/site-packages/winrm/protocol.py 指定配置文件獲取win網卡信息 ansible -i win_hosts windows -m raw -a "ipconfig" 使用默認的配置文件獲取網卡信息 ansible windows -m raw -a "ipconfig" 拷貝文件到遠程Windows主機 ansible windows -m win_copy -a 'src=/etc/passwd dest=F:\file\passwd' ansible windows -m win_copy -a "src=/usr/local/src/PayChannels20.35.zip dest=D:\Tomcat8630\webapps\PayChannels20.35.zip" ansible windows -m win_copy -a "src=/usr/local/src/SupplierPay.zip dest=D:\SupplierPay.zip 將.zip解壓到遠程Windows主機,遠程主機上必須存在須要解壓的源文件 ansible windows -m win_unzip -a"creates=no src=D:\Tomcat8620\webapps\PayChannels-8630.zip dest=D:\Tomcat8620\webapps" 解壓到D盤:ansible windows -m win_unzip -a"creates=no src=D:\SupplierPay.zip dest=D:" 重啓遠程windows主機的服務 ansible windows -m win_service -a "name=Tomcat8630 state=restarted" 重啓node.js(.bat命令) ansible windows -m win_command -a "chdir=D:\SupplierPay .\http_restart.bat" 執行win_command模塊命令 啓動redis ansible windows -m win_command -a "chdir=D:\Redis server-start.bat " ansible win -m win_command -a "chdir=C:\ a.bat " ps:"chdir=C:\ a.bat " 以前有空格 刪除文件或者目錄 ansible windows -m win_file -a "dest=D:\Tomcat8630\log\ state=absent" ansible windows -m win_file -a "dest=D:\Tomcat8630\logs\ state=absent" 建立用戶 ansible windows -m win_user -a "name=aa passwd=123456" 建立一個名叫user1的管理員用戶,要求可以遠程訪問 ansible windows -m win_user -a "name=user1 password=123 groups='Administrators,Remote Desktop Users'" 重啓的第一種方式 ansible windows -m win_shell -a "shutdown -r -t 1" 重啓的第二種方式 ansible windows -m win_reboot 獲取ip地址 ansible windows -m raw -a "ipconfig" 獲取身份 ansible windows -m win_command -a "whoami" 移動文件 ansible windows -m raw -a "cmd /c 'move /y D:\Ansible\product\DBFPlus.exe D:\Ansible\back\'" 移動文件目標端也須要制定到文件,而不能只制定到所在目錄位置 ansible windows -m raw -a "cmd /c 'move /y D:\Ansible\product D:\Ansible\back'" 移動文件夾源端和目標端目錄都不能帶反斜槓/。且將源的整個目錄移到目的端目錄裏。 建立文件夾 ansible windows -m raw -a "md d:\Ansible\justin" 刪除文件或目錄 ansible windows -m win_file -a "path=d:\Ansible\justin state=absent" 結束某程序 ansible windows -m raw -a "taskkill /F /IM snmp.exe /T" 文件傳輸 ansible windows -m win_copy -a 'src=/app/svn/127_Client/118919/zjcfg.zip dest=D:\soft\' 目標路徑不能含關鍵詞ansible,不然提示無效路徑,源使用反斜槓結果將遞歸傳輸目錄下全部文件,源不一反斜槓結尾將整個目錄傳輸到目標目錄下。