Ansible 搞定新员工 Windows 电脑标准化:2026 完整实战教程

本文按环境准备 → 主机清单 → Playbook 编写 → 批量执行 → 验证 → 进阶的顺序,把 Ansible 搞定新员工 Windows 电脑标准化的全流程讲透,最后给出可直接套用的完整 Playbook。读完你可以告别手动装机,让新员工从入职到电脑可用缩短到 15 分钟。

📞 IT 峰哥团队 · 企业信息化落地服务

IT 峰哥深耕企业 IT 基础设施领域多年,专注为各类型企业提供网络安全规划、设备选型、上网行为管理、超融合部署、文档加密、考勤门禁、视频监控等信息化项目整包落地服务。从方案设计、设备选型、上门实施到后期运维,全程跟进。

承接规模:小微企业 / 成长型企业 / 中大型企业,均提供定制化方案
服务范围:防火墙、上网行为、AP+AC、域控、NAS、超融合、文档加密、人脸考勤、视频监控、机房动环等
合作流程:需求沟通 → 方案设计 → 设备选型 → 落地实施 → 持续运维

📱 17712677007(微信同号)

工作日 9:00 – 21:00 · 周末预约制

Ansible 搞定新员工 Windows 电脑标准化

企业 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 台机器

  1. Ansible 控制节点:一台 Linux 机器(CentOS 7+/Ubuntu 20.04+),安装 Ansible
  2. 目标 Windows 电脑:新员工电脑,Windows 10/11 专业版或企业版(家庭版不支持 WinRM)
  3. 中间跳板(可选):如果控制节点和 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 电脑配置通常包括:

  1. 加入 AD 域
  2. 安装必备软件(Office、Chrome、PDF阅读器、沟通工具等)
  3. 配置系统设置(电源策略、屏保、时区、UAC级别)
  4. 安装安全客户端(EDR、杀毒、DLP)
  5. 挂载网络共享盘(部门公共盘、个人文件夹)
  6. 安装打印机驱动
  7. 配置 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 包名用途
Chromegooglechrome浏览器
Firefoxfirefox浏览器
7-Zip7zip压缩解压
Notepad++notepadplusplus文本编辑器
Gitgit代码管理
VS Codevisualstudiocode代码编辑器
PostmanpostmanAPI 测试
WPS Officewps-office-free国产办公
Foxit ReaderfoxitreaderPDF 阅读
VLCvlc视频播放
钉钉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 跑一遍,完整流程是这样的:

  1. IT 同事拿到新员工工号 → 在 inventory 文件加一行(新员工姓名、IP、部门)
  2. 新员工开机 → IT 同事在控制节点跑 ansible-playbook -i inventory site.yml --limit new01
  3. Playbook 自动执行(约 10-15 分钟):加入域 → 装软件 → 配设置 → 挂盘符 → 装打印机
  4. 电脑自动重启 1-2 次(加入域需要重启)
  5. 新员工用域账号登录 → 看到桌面有欢迎文档、网盘已挂载、打印机可用

整个流程 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 远程管理工具
持续更新 · 高速下载 · 永久免费

立即访问 →

默认

中小企业信息化建设需要上哪些设备?2026年完整规划指南

2026-7-13 9:24:41

默认

勒索病毒全网爆发企业该如何做好风险防范?2026 完整实战指南

2026-7-13 10:08:26

搜索