当前位置: 首页 > article >正文

【Ansible】批量管理 Windows自动化运维

一,前期准备

1,控制端(Linux)的要求
  • Ansible可以在安装了Python 2(2.7版)或Python 3(3.5及更高版本)的任何机器上运行。
  • 控制端计算机不支持Windows。
2,客户端(Windows)的要求

要使Ansible与Windows主机通信并使用Windows模块,Windows主机必须满足以下要求:

  • 支持的桌面操作系统包括Windows 7,8.1和10;支持的服务器操作系统包括Windows Server 2008,2008 R2,2012,2012 R2和2016。
  • 安装python环境,最好3.9+及以上版本
  • Ansible需要PowerShell 3.0或更高版本,并且至少要在Windows主机上安装.NET 4.0。可以使用Upgrade-PowerShell.ps1脚本来更新:
$url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
$file = "$env:temp\Upgrade-PowerShell.ps1"
$username = "Administrator"
$password = "Password"(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force# version can be 3.0, 4.0 or 5.1
&$file -Version 5.1 -Username $username -Password $password -Verbose

完成后,您将需要删除自动登录并将执行策略设置回默认值Restricted。您可以使用以下PowerShell命令执行此操作:

# this isn't needed but is a good security practice to complete
Set-ExecutionPolicy -ExecutionPolicy Restricted -Force$reg_winlogon_path = "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $reg_winlogon_path -Name AutoAdminLogon -Value 0
Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultUserName -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultPassword -ErrorAction SilentlyContinue

【注意】
1,如果在Server 2008上运行,则必须安装SP2。如果在Server 2008 R2或Windows 7上运行,则必须安装SP1。
2,Windows Server 2008只能安装PowerShell 3.0; 指定较新的版本将导致脚本失败。
3,username和password参数都是存储在注册表中的纯文本。确保在脚本完成后运行清理命令,以确保主机上仍未存储凭据。

  • WinRM内存补丁
    在PowerShell v3.0上运行时,WinRM服务存在一个错误,它限制了WinRM可用的内存量。如果未安装此补丁,Ansible将无法在Windows主机上执行某些命令。这些补丁应作为系统引导或映像过程的一部分安装。Install-WMF3Hotfix.ps1脚本可用于在受影响的主机上安装此修补程序。 以下PowerShell命令将安装此修补程序:
$url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Install-WMF3Hotfix.ps1"
$file = "$env:temp\Install-WMF3Hotfix.ps1"(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file -Verbose
  • WinRM设置
    请在PowerShell中运行以下命令:
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)powershell.exe -ExecutionPolicy ByPass -File $file

【注意】
ConfigureRemotingForAnsible.ps1脚本仅用于培训和开发目的,不应在生产环境中使用,因为它启用了 Basic 这本质上不安全(如身份验证)。

  • WinRM Listener
    WinRM服务侦听一个或多个端口上的请求
# 查看在WinRM服务上运行的当前侦听器
winrm quickconfig
winrm enumerate winrm/config/Listener# 修改winrm配置,启用远程连接认证
winrm set winrm/config/service/auth '@{Basic="true"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
  • windows 防火墙配置
    选择入站规则,允许5985-5986端口通过,均为TCP协议。

二,基本配置

添加windows客户端连接信息。编辑 /etc/ansible/hosts, 添加客户端主机信息(ansible服务端的配置)

[组名]
192.168.2.2 ansible_user="Administrator" ansible_password="Password" ansible_port=5986 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore  ansible_winrm_transport=basic

三,常用模块命令

下面ip:‘192.168.2.2’ 可以改成hosts中的【组名】。

1,ping 远程windows主机
ansible 192.168.2.2 -m win_ping
2,创建目录
ansible 192.168.2.2 -m win_file -a 'path=D:\\test state=directory'
3,复制/下发文件
ansible 192.168.2.2 -m win_copy -a 'src=/etc/hosts  dest=D:\\hosts.txt'
4,删除文件
ansible 192.168.2.2 -m win_file -a 'dest=d:\\config_dir\\hosts.txt state=absent'
5,删除文件或目录
ansible 192.168.2.2 -m win_file -a "path=d:\\Ansible\\justin  state=absent"
6,执行cmd命令
ansible 192.168.2.2 -m win_shell -a 'ipconfig'
7,重启windows

三种方式来重启

ansible 192.168.2.2 -m win_reboot# 立即重启系统,不会等待,可能会导致应用程序突然关闭,丢失未保存的数据:
ansible 192.168.2.2 -m win_shell -a 'shutdown -r -t 0'
# 在 1 秒后重启系统,允许系统关闭正在运行的应用程序并提示用户保存工作(推荐):
ansible 192.168.2.2 -m win_shell -a "shutdown -r -t 1"ansible 192.168.2.2 -m win_service -a "name=spooler state=restarted"
8,创建用户

远程在windows客户端上创建用户

ansible 192.168.2.2 -m win_user -a "name=username  passwd=123456 groups=Administrators"
9,windows服务管理
ansible 192.168.2.2 -m win_shell -a "net stop|start zabbix_agent"
10,获取window主机信息
ansible 192.168.2.2 -m setup
11,执行ps脚本
ansible 192.168.2.2 -m script -a "E://test.ps1"
12,获取IP地址:
ansible 192.168.2.2 -m win_command -a "ipconfig"
13,获取身份 :
ansible windows -m win_command -a "whoami"
14,查看文件状态:
ansible 192.168.2.2 -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 raw -a "taskkill /F /IM QQ.exe /T".zip解压到远程Windows主机,远程主机上必须存在需要解压的源文件
ansible windows -m win_unzip -a "creates=no src=D:\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 " 之前有空格创建一个名叫user1的管理员用户,要求能够远程访问
ansible windows -m win_user -a "name=user1 password=123 groups='Administrators,Remote Desktop Users'"移动文件 
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 raw -a "taskkill /F /IM snmp.exe /T"

常用模块:
win_acl (E) :设置文件/目录属主属组权限;
win_copy :拷贝文件到远程Windows主机;
win_file :创建,删除文件或目录;
win_lineinfile :匹配替换文件内容;
win_package (E) :安装/卸载本地或网络软件包;
win_service :管理Windows Services服务;
win_user :管理Windows本地用户。

相关文章:

【Ansible】批量管理 Windows自动化运维

一,前期准备 1,控制端(Linux)的要求 Ansible可以在安装了Python 2(2.7版)或Python 3(3.5及更高版本)的任何机器上运行。控制端计算机不支持Windows。 2,客户端&#x…...

【源码】【Java并发】【ThreadLocal】适合中学者体质的ThreadLocal源码阅读

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 📚欢迎订阅专栏…...

背包问题模板

文章目录 01背包题意思路代码优化 完全背包题意思路代码优化 多重背包题意思路代码优化 分组背包题意思路代码 01背包 特点:每件物品最多只能用一次 01背包问题 题意 给出每件物品的体积v,价值w,求解能装入背包的的物品的最大价值,并且每件物品只能选一…...

Redis 处理读请求

在前文“Redis 接收连接”中,Redis 将接收的客户端连接加入了 epoll 中监听,同时还设置了读事件处理器 connSocketEventHandler。 假设现在客户端向 Redis 发来一条 set key value 命令。 事件循环 aeProcessEvents 在事件循环 aeProcessEvents 中会调…...

Sentinel源码—8.限流算法和设计模式总结二

大纲 1.关于限流的概述 2.高并发下的四大限流算法原理及实现 3.Sentinel使用的设计模式总结 3.Sentinel使用的设计模式总结 (1)责任链模式 (2)监听器模式 (3)适配器模式 (4)模版方法模式 (5)策略模式 (6)观察者模式 (1)责任链模式 一.责任链接口ProcessorSlot 二.责…...

VulnHub-DarkHole_1靶机渗透教程

VulnHub-DarkHole_1靶机渗透教程 1.靶机部署 [Onepanda] Mik1ysomething 靶机下载:https://download.vulnhub.com/darkhole/DarkHole.zip 直接使用VMware打开就行 导入成功,打开虚拟机,到此虚拟机部署完成! 注意&#xff1a…...

Keil MDK‑5 中使用 GNU ARM GCC 的 -Wno-* 选项屏蔽编译警告

在项目编译过程中,我们常常会遇到许多警告提示;而在有些情况下,当我们已经了解这些警告的原因时,可以选择忽略它们,从而减少干扰,集中精力修复其他更重要的问题。 一、添加屏蔽警告的编译选项 &#xff08…...

边缘计算全透视:架构、应用与未来图景

边缘计算全透视:架构、应用与未来图景 一、产生背景二、本质三、特点(一)位置靠近数据源(二)分布式架构(三)实时性要求高 四、关键技术(一)硬件技术(二&#…...

爬虫学习——下载文件和图片、模拟登录方式进行信息获取

一、下载文件和图片 Scrapy中有两个类用于专门下载文件和图片,FilesPipeline和ImagesPipeline,其本质就是一个专门的下载器,其使用的方式就是将文件或图片的url传给它(eg:item[“file_urls”])。使用之前需要在settings.py文件中对其进行声明…...

路由器转发规则设置方法步骤,内网服务器端口怎么让异地连接访问的实现

在路由器上设置端口转发(Port Forwarding)可以将外部网络流量引导到特定的局域网设备,这对于需要远程访问服务器、摄像头、游戏主机等设备非常有用。 登录路由器管理界面,添加端口转发规则让外网访问内网的实现教程分享。以下是设…...

MQ底层原理

RabbitMQ 概述 RabbitMQ 是⼀个开源的⾼性能、可扩展、消息中间件(Message Broker),实现了 Advanced Message Queuing Protocol(AMQP)协议,可以帮助不同应⽤程序之间进⾏通信和数据交换。RabbitMQ 是由 E…...

本地部署DeepSeek-R1模型接入PyCharm

以下是DeepSeek-R1本地部署及接入PyCharm的详细步骤指南,整合了视频内容及官方文档核心要点: 一、本地部署DeepSeek-R1模型 1. 安装Ollama框架 ​下载安装包 访问Ollama官网(https://ollama.com/download)Windows用户选择.exe文件,macOS用户选择.dmg包。 ​安装验证 双击…...

jvm-描述符与特征签名的区别

在Java虚拟机(JVM)中,存储的是方法签名,而不是仅仅方法描述符。方法签名包含了方法的参数类型和返回值类型的信息,而方法描述符通常指的是仅包含参数类型的那部分信息。为了更清晰地理解这两者的区别以及它们如何在JVM…...

Java基于SpringBoot的企业车辆管理系统,附源码+文档说明

博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...

QT调用ffmpeg库实现视频录制

可以通过QProcess调用ffmpeg命令行,也可以直接调用ffmpeg库,方便。 调用库 安装ffmpeg ffmpeg -version 没装就装 sudo apt-get update sudo apt-get install ffmpeg sudo apt-get install ffmpeg libavdevice-dev .pro引入库路径,引入库 LIBS += -L/usr/lib/aarch64-l…...

百度 Al 智能体心响 App 上线

百度 AI 智能体心响 App 于 2025 年 4 月 17 日低调上线安卓应用市场,4 月 22 日正式登陆各大安卓应用市场。以下是对这款应用的详细介绍: 产品定位:这是一款以 “AI 任务完成引擎” 为核心的手机端超级智能体产品,定位为 “复杂任…...

进阶篇 第 2 篇:自相关性深度解析 - ACF 与 PACF 图完全指南

进阶篇 第 2 篇:自相关性深度解析 - ACF 与 PACF 图完全指南 (图片来源: Negative Space on Pexels) 欢迎来到进阶系列的第二篇!在上一篇,我们探讨了更高级的时间序列分解技术和强大的指数平滑 (ETS) 预测模型。ETS 模型通过巧妙的加权平均捕…...

【Java面试笔记:基础】7.int和Integer有什么区别?

在Java中,int和Integer虽然都用于表示整数值,但它们在本质、用法和特性上有显著差异。 1. int 和 Integer 的区别 int: 原始数据类型:int 是 Java 的 8 个原始数据类型之一,用于表示整数。性能优势:直接存…...

鸿蒙移动应用开发--渲染控制实验

任务:使用“对象数组”、“ForEach渲染”、“Badge角标组件”、“Grid布局”等相关知识,实现生效抽奖卡案例。如图1所示: 图1 生肖抽奖卡实例图 图1(a)中有6张生肖卡可以抽奖,每抽中一张,会通过弹层显示出来&#xf…...

AI代表企业签订的合同是否具有法律效力?

AI代表企业签订的合同是否具有法律效力? 首席数据官高鹏律师团队编著 在数字经济高速发展的今天,人工智能(AI)技术已广泛应用于商业活动,包括合同起草、审查甚至签署环节。然而,AI代表企业签订的合同是否具…...

安宝特分享|AR智能装备赋能企业效率跃升

AR装备开启智能培训新时代 在智能制造与数字化转型浪潮下,传统培训体系正面临深度重构。安宝特基于工业级AR智能终端打造的培训系统,可助力企业构建智慧培训新生态。 AR技术在不同领域的助力 01远程指导方面 相较于传统视频教学的单向输出模式&#x…...

SpringCloud组件—Eureka

一.背景 1.问题提出 我们在一个父项目下写了两个子项目,需要两个子项目之间相互调用。我们可以发送HTTP请求来获取我们想要的资源,具体实现的方法有很多,可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 举个例子&#x…...

模型 螃蟹效应

系列文章分享模型,了解更多👉 模型_思维模型目录。个体互钳,团队难行。 1 螃蟹效应的应用 1.1 教育行业—优秀教师遭集体举报 行业背景:某市重点中学推行绩效改革,将班级升学率与教师奖金直接挂钩,打破原…...

符号速率估计——小波变换法

[TOC]符号速率估计——小波变换法 一、原理 1.Haar小波变换 小波变换在信号处理领域被成为数学显微镜,不同于傅里叶变换,小波变换可以观测信号随时间变换的频谱特征,因此,常用于时频分析。   当小波变换前后位置处于同一个码元…...

【架构】ANSI/IEEE 1471-2000标准深度解析:软件密集型系统架构描述推荐实践

引言 在软件工程领域,架构设计是确保系统成功的关键因素之一。随着软件系统日益复杂化,如何有效描述和沟通系统架构成为了一个亟待解决的问题。ANSI/IEEE 1471-2000(正式名称为"推荐软件密集型系统架构描述实践")应运而…...

python兴趣匹配算法

python兴趣匹配算法,用于推荐好友,短视频推荐等等领域 功能列表: 1.用户类的定义,存储用户的基本信息和兴趣。 2.计算两个用户之间兴趣的匹配分数,比较每一位是否相同。 3.根据匹配分数对候选人进行排序。 4.提供交互…...

每日算法-250422

每日算法 - 250422 1561. 你可以获得的最大硬币数目 题目 思路 贪心 解题过程 根据题意,我们想要获得最大的硬币数目。每次选择时,有三堆硬币:最大的一堆会被 Alice 拿走,最小的一堆会被 Bob 拿走,剩下的一堆&#xf…...

【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型(敏感性分析方法)

【MATLAB第116期】基于MATLAB的NBRO-XGBoost的SHAP可解释回归模型(敏感性分析方法) 引言 该文章实现了一个可解释的回归模型,使用NBRO-XGBoost(方法可以替换,但是需要有一定的编程基础)来预测特征输出。该…...

微信公众号消息模板推送没有“详情“按钮?无法点击跳转

踩坑!!!!踩坑!!!!踩坑!!!! 如下 简单说下我的情况,按官方文档传参url了 、但就是看不到查看详情按钮 。如下 真凶&#x…...

WHAT - 静态资源缓存穿透

文章目录 1. 动态哈希命名的基本思路2. 具体实现2.1 Vite/Webpack 配置动态哈希2.2 HTML 文件中动态引用手动引用使用 index.html 模板动态插入 2.3 结合 Cache-Control 避免缓存穿透2.4 适用于多环境的动态策略 总结 在多环境部署中,静态资源缓存穿透是一个常见问题…...