You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于给定服务列表查询Windows服务并启动未运行项的Ansible实现咨询

Ansible Windows服务状态检查&自动修复Playbook正确实现

完整修正后的Playbook代码

- name: 检查指定Windows服务的运行状态
  ansible.windows.win_service_info:
    name: "{{ item }}"
  register: win_service_info
  with_items:
    - BrokerInfrastructure # 后台任务基础架构服务
    - DcomLaunch # DCOM服务器进程启动器服务
    - gpsvc # 组策略客户端服务

- name: 启动未运行的服务并设置开机自启
  ansible.windows.win_service:
    name: "{{ item.item }}"
    start_mode: auto
    state: started
  register: service_startup
  with_items: "{{ win_service_info.results }}"
  when: item.exists # 仅当服务存在时执行,避免报错

关键参数说明

  • name参数写法:{{ item.item }}
    第一个任务遍历服务列表时注册的win_service_info.results中,每个返回结果的item字段对应最初传入的服务名称,直接调用即可匹配到对应服务。
  • when判断条件写法:item.exists
    首先判断目标服务在主机上真实存在,避免操作不存在的服务导致任务失败。ansible.windows.win_service模块本身是幂等的:
    • 如果服务已经是运行状态、启动模式为自动,任务不会做任何修改
    • 如果需要严格限制仅当服务未运行时才执行,可以把条件扩展为item.exists and item.services[0].state != "running"

额外优化方案

如果不需要单独记录服务初始状态,完全可以省略第一步的查询任务,直接使用更简洁的写法,执行效率更高:

- name: 配置指定Windows服务为自动启动且运行状态
  ansible.windows.win_service:
    name: "{{ item }}"
    start_mode: auto
    state: started
  with_items:
    - BrokerInfrastructure
    - DcomLaunch
    - gpsvc

语法修正提示

原代码中第一个任务的ansible.windows.win_service_info行缩进错误,需要和同级的name参数保持相同缩进,否则会触发YAML语法错误。

内容的提问来源于stack exchange,提问作者alphablack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 17:45:02