如何通过Ansible获取Windows所有服务信息?Win_Service需指定name参数
获取Windows系统所有服务列表的Ansible方案
当然有办法啦!虽然win_service模块确实需要指定服务名才能查询单条服务的信息,但我们可以通过其他方式轻松获取Windows系统的所有服务列表,下面给你两种实用的方案:
方案1:用win_shell调用PowerShell命令
PowerShell自带的Get-Service cmdlet可以直接列出系统中所有服务,搭配Ansible的win_shell模块就能完美实现需求,还能把结果注册成变量方便后续处理。
示例Playbook:
- name: 拉取Windows所有服务列表 hosts: windows tasks: - name: 执行PowerShell命令获取服务详情 win_shell: Get-Service | Select-Object Name, DisplayName, Status, StartType register: all_services - name: 打印所有服务信息 debug: var: all_services.stdout_lines
如果需要更全面的服务属性(比如是否可停止、服务描述等),可以去掉Select-Object部分,直接执行Get-Service;要是想拿到结构化数据方便后续解析,还可以转换成JSON格式:
win_shell: Get-Service | Select-Object Name, DisplayName, Status, StartType, CanStop | ConvertTo-Json
方案2:用win_command调用系统sc命令
Windows自带的sc命令也支持查询全量服务,通过sc query type= service state= all就能列出所有状态的服务(运行中、停止、暂停等)。
示例Playbook:
- name: 拉取Windows所有服务列表 hosts: windows tasks: - name: 执行sc命令获取所有服务 win_command: sc query type= service state= all register: all_services - name: 打印所有服务信息 debug: var: all_services.stdout_lines
⚠️ 注意:这里type=和state=后面的空格不能省略,这是sc命令的语法要求,少了空格会导致命令执行失败。
内容的提问来源于stack exchange,提问作者Been A Long While
相关产品推荐
相关产品推荐

