如何通过Ansible获取Windows服务列表及其运行状态?
问题解决:使用win_service_info获取运行中Windows服务的名称与状态
问题分析
你的Playbook存在两个核心问题:
- 列表拼接语法错误:
set_fact中service_names: "{{ service_names }}" + {{ item }}的写法不符合Ansible列表操作规范,无法正确将服务名称添加到列表中。 - 未保留状态信息:仅提取了服务名称,没有同步获取状态字段,导致无法在debug中同时展示状态。
优化后的Playbook
无需手动循环拼接列表,直接通过json_query过滤出运行状态的服务,并同时提取名称和状态:
--- - name: Get Running Windows Services hosts: test gather_facts: yes tasks: - name: Get info for USRJOB* services ansible.windows.win_service_info: name: USRJOB* register: service_info - name: Filter running services with name and state set_fact: running_services: "{{ service_info.services | json_query('[?state == `running`].{name: name, state: state}') }}" - name: Print running services and their states debug: var: running_services
关键说明
- 用
json_query的[?state ==running]直接筛选运行中的服务,通过{name: name, state: state}指定要保留的字段,一步生成包含名称和状态的结构化列表。 - 避免了手动循环拼接的冗余操作,输出结果清晰展示每个服务的名称与对应状态。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

