📞 IT 峰哥团队 · 企业信息化落地服务
IT 峰哥深耕企业 IT 基础设施领域多年,专注为各类型企业提供网络安全规划、设备选型、上网行为管理、超融合部署、文档加密、考勤门禁、视频监控等信息化项目整包落地服务。从方案设计、设备选型、上门实施到后期运维,全程跟进。
承接规模:小微企业 / 成长型企业 / 中大型企业,均提供定制化方案
服务范围:防火墙、上网行为、AP+AC、域控、NAS、超融合、文档加密、人脸考勤、视频监控、机房动环等
合作流程:需求沟通 → 方案设计 → 设备选型 → 落地实施 → 持续运维
📱 17712677007(微信同号)
工作日 9:00 – 21:00 · 周末预约制

企业 IT 运维最头疼的”体力活”之一,就是每来一位新员工就要手动给 Windows 电脑装软件、改配置、加域、装安全客户端……重复劳动 2-3 小时/台,人越多越崩溃。Ansible作为业界主流的自动化运维工具,原本是 Linux 运维的杀手锏,但通过 WinRM 协议同样能完美管理 Windows 电脑。本文按”环境准备 → 主机清单 → Playbook 编写 → 批量执行 → 验证 → 进阶“的顺序,把 Ansible 搞定新员工 Windows 电脑标准化的全流程讲透,最后给出可直接套用的完整 Playbook。读完你可以告别手动装机,让新员工从入职到电脑可用缩短到 15 分钟。
一、为什么用 Ansible 而不是其他工具
市面上能批量管 Windows 电脑的工具不少:SCCM、Intune、Puppet、SaltStack、Ansible 都行。但对中小企业的 IT 团队来说,Ansible 是性价比最高的选择:
- 零客户端:Linux/Unix 出身的 Ansible 通过 SSH/WinRM 协议工作,Windows 电脑不需要装 Agent,省去大规模分发的麻烦
- 学习曲线平缓:Playbook 用 YAML 写,语法简单,懂点 Linux 基础的人一周能上手
- 免费开源:Red Hat 维护,社区版完全免费,企业版才收费
- 跨平台:同一套 Ansible 控制节点能同时管理 Linux 服务器和 Windows 电脑
- 幂等性:重复执行同一 Playbook 结果一致,不会因为重跑把系统搞乱
对比 SCCM/Intune:前者贵、客户端重、运维复杂;后者依赖云端、定制能力弱。Ansible 在”轻量 + 灵活 + 免费”上几乎无敌。
二、环境准备:3 台机器搭建最小化 Ansible 管理 Windows 环境
最小化方案需要3 台机器:
- Ansible 控制节点:一台 Linux 机器(CentOS 7+/Ubuntu 20.04+),安装 Ansible
- 目标 Windows 电脑:新员工电脑,Windows 10/11 专业版或企业版(家庭版不支持 WinRM)
- 中间跳板(可选):如果控制节点和 Windows 电脑不在同一网段,需要 SSH 跳板
2.1 控制节点安装 Ansible
# CentOS / RHEL / Rocky
yum install -y epel-release
yum install -y ansible
# Ubuntu / Debian
apt update
apt install -y software-properties-common
add-apt-repository -y ppa:ansible/ansible
apt update
apt install -y ansible
# 验证安装
ansible --version
# 应输出 ansible 2.9+ 版本号
2.2 Windows 电脑开启 WinRM(最关键一步)
Ansible 通过 WinRM(Windows Remote Management)协议远程执行命令。WinRM 默认没开启,需要手动配置。两种方式:
方式一:图形界面(适合零星配置)
右键”此电脑”→ 管理 → 服务和应用 → 服务 → 找到 Windows Remote Management (WS-Management) → 启动类型改为”自动”→ 启动。
方式二:PowerShell 脚本(适合批量开启,建议用这个)
用管理员权限打开 PowerShell,运行官方配置脚本:
# 下载微软官方 WinRM 配置脚本
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1" -OutFile "ConfigureRemotingForAnsible.ps1"
# 执行(管理员 PowerShell)
powershell -ExecutionPolicy Bypass -File ConfigureRemotingForAnsible.ps1
脚本会自动完成:
- 开启 WinRM 服务并设为自动启动
- 配置 WinRM 监听器(HTTP 5985 / HTTPS 5986)
- 开启 PowerShell Remoting
- 配置 Windows 防火墙放行 5985/5986
- 设置 Basic auth(Ansible 默认认证方式)
验证 WinRM 监听是否正常(在 Windows 上跑):
winrm enumerate winrm/config/listener
# 应看到 HTTP 监听器在 5985 端口,HTTPS 在 5986 端口
2.3 网络与防火墙放行
确保控制节点能访问 Windows 电脑的 5985(HTTP)或 5986(HTTPS)端口:
# 控制节点测试连通性
nc -zv 192.168.1.100 5985
# 应显示 192.168.1.100:5985 open
# Windows 防火墙(如果上面脚本没自动放行)
New-NetFirewallRule -DisplayName "WinRM 5985" -Direction Inbound -LocalPort 5985 -Protocol TCP -Action Allow
👉 自动化运维工具包
Ansible 自动化运维授权版本 · AWX 可视化运维平台 · Jenkins 持续集成部署工具
GitLab 企业版 · WinRM/SSH 远程管理客户端 · Python 3 自动化脚本开发环境
持续更新 · 高速下载 · 永久免费
三、Ansible 主机清单:管理 Windows 电脑的”通讯录”
Ansible 通过 Inventory(主机清单) 找到要管理的目标机器。新员工电脑通常在 AD 域里,用 LDAP 动态发现最方便;小规模场景用静态文件也够用。
3.1 静态主机清单(适合 50 人以下)
编辑 /etc/ansible/hosts 或新建项目目录下的 inventory 文件:
[windows_new_hire]
# 新员工电脑分组
new01 ansible_host=192.168.1.101
new02 ansible_host=192.168.1.102
new03 ansible_host=192.168.1.103
[windows:children]
windows_new_hire
# Windows 通用变量
[windows:vars]
ansible_user=ansible_admin
ansible_password=YourStrongPassword
ansible_connection=winrm
ansible_winrm_port=5985
ansible_winrm_transport=basic
ansible_winrm_server_cert_validation=ignore
安全建议:生产环境不要把密码明文写在 inventory 文件里。用 ansible-vault 加密:
# 创建加密文件
ansible-vault create secret.yml
# 内容:
ansible_user: ansible_admin
ansible_password: YourStrongPassword
# 执行时指定 vault 密码
ansible-playbook -i inventory site.yml --ask-vault-pass
3.2 动态主机清单(AD 域集成)
Windows 电脑都加入域后,可以用 Active Directory 插件动态发现:
# /etc/ansible/inventory/ad_inventory.yml
plugin: ansible.builtin.ldap
# 或用 community.general.ldap
server: ldap://dc01.92zl.cn:389
bind_dn: ansible@92zl.cn
bind_pw: "{{ vault_ad_password }}"
search_base: "OU=Computers,DC=92zl,DC=cn"
search_filter: "(&(objectClass=computer)(operatingSystem=Windows*))"
# 过滤掉域控、服务器、虚拟机
scope: subtree
# 把电脑名映射为 Ansible 可识别的 hostname
compose:
ansible_host: dns_record(d.hostname, "A")
3.3 测试主机清单连通性
# 测试单台
ansible new01 -i inventory -m win_ping
# 测试整个组
ansible windows_new_hire -i inventory -m win_ping
# 成功的话返回
new01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
四、Ansible Playbook 编写:新员工 Windows 电脑标准化实战
Playbook 是 Ansible 的”剧本”,用 YAML 格式描述要做什么、按什么顺序做。一个标准化的新员工 Windows 电脑配置通常包括:
- 加入 AD 域
- 安装必备软件(Office、Chrome、PDF阅读器、沟通工具等)
- 配置系统设置(电源策略、屏保、时区、UAC级别)
- 安装安全客户端(EDR、杀毒、DLP)
- 挂载网络共享盘(部门公共盘、个人文件夹)
- 安装打印机驱动
- 配置 Outlook/邮箱
4.1 主 Playbook(site.yml)
---
- name: 新员工 Windows 电脑标准化配置
hosts: windows_new_hire
gather_facts: yes
vars:
domain_name: 92zl.cn
domain_user: "{{ ad_admin_user }}"
domain_password: "{{ ad_admin_password }}"
employee_name: "{{ hostvars[inventory_hostname].employee_name }}"
department: "{{ hostvars[inventory_hostname].department }}"
tasks:
- name: 加入 AD 域
ansible.windows.win_domain_membership:
dns_domain_name: "{{ domain_name }}"
domain_admin_user: "{{ domain_user }}"
domain_admin_password: "{{ domain_password }}"
state: domain
register: domain_result
- name: 加入域后重启
ansible.windows.win_reboot:
when: domain_result.reboot_required
- name: 安装必备软件 - Office 365
ansible.windows.win_package:
path: "\fs01softwareMicrosoftOffice365Setup.exe"
arguments: /quiet
state: present
when: inventory_hostname in groups['windows_new_hire']
- name: 安装 Chrome 浏览器
chocolatey.chocolatey.win_chocolatey:
name: googlechrome
state: present
- name: 安装 PDF 阅读器 - Foxit
chocolatey.chocolatey.win_chocolatey:
name: foxitreader
state: present
- name: 安装沟通工具 - 钉钉
chocolatey.chocolatey.win_chocolatey:
name: dingtalk
state: present
- name: 安装 WPS Office
chocolatey.chocolatey.win_chocolatey:
name: wps-office-free
state: present
- name: 安装 7-Zip
chocolatey.chocolatey.win_chocolatey:
name: 7zip
state: present
- name: 设置电源策略 - 高性能
ansible.windows.win_power_plan:
name: high performance
- name: 关闭屏幕保护程序
ansible.windows.win_regedit:
path: HKCU:SoftwarePoliciesMicrosoftWindowsControl PanelDesktop
name: ScreenSaveActive
data: "0"
type: string
- name: 设置时区为北京时间
ansible.windows.win_timezone:
timezone: China Standard Time
- name: 关闭 UAC 提示(可选)
ansible.windows.win_regedit:
path: HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem
name: ConsentPromptBehaviorAdmin
data: "0"
type: dword
when: department == "engineering"
- name: 挂载部门共享盘
ansible.windows.win_mount:
path: "S:"
src: "\fs01{{ department }}"
fstype: smb
state: present
username: "{{ ansible_user }}"
password: "{{ ansible_password }}"
- name: 挂载个人文件夹
ansible.windows.win_mount:
path: "P:"
src: "\fs01users${{ employee_name }}"
fstype: smb
state: present
username: "{{ ansible_user }}"
password: "{{ ansible_password }}"
- name: 安装部门打印机驱动
ansible.windows.win_package:
path: "\fs01printers{{ department }}_printer_driver.exe"
arguments: /quiet /norestart
state: present
ignore_errors: yes
- name: 设置默认打印机
ansible.windows.win_regedit:
path: HKCU:SoftwareMicrosoftWindows NTCurrentVersionWindows
name: Device
data: "{{ department }}_printer,winspool,Ne02:"
type: string
- name: 复制欢迎文档到桌面
ansible.windows.win_copy:
src: "files/welcome_{{ department }}.txt"
dest: "C:Users{{ ansible_user }}Desktop"
- name: 显示完成提示
ansible.windows.win_msg:
msg: |
✅ 新员工电脑标准化配置完成!
已为您配置:
- 加入域:{{ domain_name }}
- 安装软件:Office 365、Chrome、Foxit、钉钉、WPS
- 挂载盘符:S:(部门共享) P:(个人)
- 默认打印机:{{ department }}_printer
如有问题请联系 IT 部门。
wait: yes
timeout: 30
4.2 Chocolatey 批量装软件(推荐)
上面 Playbook 里用了 Chocolatey,它是 Windows 平台的”包管理器”,类似 Linux 的 apt/yum。强烈推荐先在所有目标机器上装 Chocolatey:
# 在所有 Windows 上装 Chocolatey
- hosts: windows_new_hire
tasks:
- name: 安装 Chocolatey
win_chocolatey:
name: chocolatey
state: present
source: cmd
Chocolatey 软件库(chocolatey.org/packages)有 9000+ 款软件,常用的都有:
| 软件 | Chocolatey 包名 | 用途 |
|---|---|---|
| Chrome | googlechrome | 浏览器 |
| Firefox | firefox | 浏览器 |
| 7-Zip | 7zip | 压缩解压 |
| Notepad++ | notepadplusplus | 文本编辑器 |
| Git | git | 代码管理 |
| VS Code | visualstudiocode | 代码编辑器 |
| Postman | postman | API 测试 |
| WPS Office | wps-office-free | 国产办公 |
| Foxit Reader | foxitreader | PDF 阅读 |
| VLC | vlc | 视频播放 |
| 钉钉 | dingtalk | 沟通工具 |
| 企业微信 | wechat-work | 沟通工具 |
| 飞书 | feishu | 沟通工具 |
五、执行 Playbook 与排错
5.1 执行命令
# 单台电脑
ansible-playbook -i inventory site.yml --limit new01
# 多台电脑(组)
ansible-playbook -i inventory site.yml
# 检查模式(Dry Run,不会真改)
ansible-playbook -i inventory site.yml --check
# 详细输出
ansible-playbook -i inventory site.yml -v
# 完整调试
ansible-playbook -i inventory site.yml -vvvv
5.2 常见错误及解决
错误 1:winrm 认证失败
fatal: [new01]: FAILED! => {"msg": "winrm auth: basic auth failed"}
# 解决:检查密码是否正确,确认 Windows 已开启 Basic auth
# PowerShell(管理员):
Set-Item -Path "WSMan:localhostServiceAuthBasic" -Value $true
错误 2:连接超时
fatal: [new01]: UNREACHABLE! => {"changed": false, "msg": "winrm connection timed out"}
# 解决:检查防火墙、网络连通性
Test-NetConnection -ComputerName 192.168.1.101 -Port 5985
错误 3:加入域失败
fatal: [new01]: FAILED! => {"msg": "Failed to join domain"}
# 解决:检查域账号权限、域名拼写、DNS 是否能解析域控
六、用 Roles 组织复杂 Playbook(进阶)
当 Playbook 越来越长(>200 行),建议拆成 Roles(角色),按职责分目录:
project/
├── ansible.cfg
├── inventory/
├── site.yml # 主入口
├── secret.yml # ansible-vault 加密
└── roles/
├── common/ # 通用配置(时区、电源、UAC)
├── software/ # 软件安装
├── domain/ # 加入域
├── storage/ # 挂载盘符
└── security/ # 安全客户端
Role 目录结构(以 software 为例):
roles/software/
├── tasks/
│ ├── main.yml # 入口
│ ├── office.yml # Office
│ ├── browser.yml # 浏览器
│ └── tools.yml # 工具软件
├── vars/
│ └── main.yml # 变量定义
├── defaults/
│ └── main.yml # 默认变量
└── files/
└── welcome_engineering.txt
主 Playbook 调用:
---
- name: 新员工电脑标准化
hosts: windows_new_hire
roles:
- common
- software
- domain
- storage
- security
七、完整流程:从新人入职到电脑可用 15 分钟
把上面的 Playbook 跑一遍,完整流程是这样的:
- IT 同事拿到新员工工号 → 在 inventory 文件加一行(新员工姓名、IP、部门)
- 新员工开机 → IT 同事在控制节点跑
ansible-playbook -i inventory site.yml --limit new01 - Playbook 自动执行(约 10-15 分钟):加入域 → 装软件 → 配设置 → 挂盘符 → 装打印机
- 电脑自动重启 1-2 次(加入域需要重启)
- 新员工用域账号登录 → 看到桌面有欢迎文档、网盘已挂载、打印机可用
整个流程 IT 同事实际动手时间 < 5 分钟(写 inventory 一行 + 跑一条命令),剩下都是 Ansible 自动完成。
八、避坑要点:踩过的坑总结
坑 1:WinRM 不稳定,老断连
WinRM 默认 IdleTimeout 只有 5 分钟,长时间操作(如装 Office)会超时。修改:
# Windows PowerShell(管理员)
Set-Item -Path "WSMan:localhostShellIdleTimeout" -Value "18000000"
坑 2:Chocolatey 装软件需要重启
有些软件(如 Office)装完需要重启才能用,Playbook 里要加:
- name: 重启电脑
ansible.windows.win_reboot:
reboot_timeout: 600
when: software_install_result.changed
坑 3:Windows 家庭版不支持
WinRM 需要 Windows 专业版/企业版,家庭版不支持远程管理。新员工电脑建议统一采购专业版。
坑 4:UAC 会阻断远程操作
UAC(用户账户控制)开启时,远程 PowerShell 执行的某些命令会被拦截。两种解决:
- Playbook 里临时关闭 UAC(推荐)
- 域控 GPO 统一关闭 UAC
坑 5:中文软件名乱码
有些国产软件(如 WPS、Foxit)的安装包路径有中文,Ansible 调用要确保控制节点用 UTF-8 编码:
# 控制节点 /etc/environment
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
九、扩展:从单台到 1000 台的规模化
50 人以下用上面方案完全够用。200+ 人企业建议升级:
- Ansible Tower / AWX:Web 界面管理,可视化跑 Playbook、定时任务、审批流
- 动态 Inventory**:自动从 AD/CMDB 发现新机器,新员工电脑加入域后自动纳入管理
- CI/CD 集成**:Playbook 改动走 Git 版本控制 + Jenkins 自动测试
- 分布式执行**:Ansible 控制节点集群,支持 1000+ 并发
对于开发者新员工,还能加一步:
- name: 安装 Docker Desktop
chocolatey.chocolatey.win_chocolatey:
name: docker-desktop
state: present
- name: 安装 Node.js LTS
chocolatey.chocolatey.win_chocolatey:
name: nodejs-lts
state: present
- name: 安装 Python 3
chocolatey.chocolatey.win_chocolatey:
name: python3
state: present
结语:把重复劳动交给 Ansible,把时间留给真正有挑战的工作
手动给新员工装机、改配置、加域、装软件,看似”简单工作”,但日积月累会占用 IT 同事30% 以上的时间。Ansible 搞定新员工 Windows 电脑标准化不只是省时间,更重要的是把 IT 工作从”操作员”升级到”自动化工程师”——同样的逻辑可以扩展到服务器配置、应用部署、安全基线检查等场景。
按本文的 Playbook 套用,新员工从入职到电脑可用只需 15 分钟,IT 同事每天能多出 2-3 小时做更有价值的事。Ansible 自动化运维工具完整授权版本和Ansible 自动化运维相关工具的下载,可以参考 IT 峰哥软件库整理的资源;企业级自动化运维平台(AWX、Jenkins、GitLab)落地支持,可联系 IT 峰哥团队沟通:17712677007(微信同号)。
🚀 IT峰哥软件库
Ansible 自动化运维授权版 · AWX 可视化运维平台 · Jenkins / GitLab CI 持续集成部署
Chocolatey Windows 包管理器 · Python 3 自动化开发环境 · WinRM / SSH 远程管理工具
持续更新 · 高速下载 · 永久免费