Windows服务管理器中导出服务列表到文本的运维脚本

1次阅读

可通过命令行导出windows服务列表:sc query导出基础信息,PowerShell导出含状态、启动类型等详细字段的制表符分隔文件,并支持按状态/启动类型筛选禁用或异常服务,且可添加时间戳避免覆盖。

在 windows 服务管理器(services.msc)中无法直接导出服务列表,但可通过命令行快速生成结构化文本文件,满足运维记录、比对或自动化分析需求。

使用 sc query 命令导出基础服务信息

sc query 是系统内置工具,无需额外安装,适合批量获取服务状态、名称和显示名称。执行以下命令可导出所有服务的简明列表:

  • 以管理员身份打开命令提示符或 PowerShell
  • 运行:sc query state= all | findstr “SERVICE_NAME DisplayName” > services_basic.txt
  • 输出文件 services_basic.txt 包含每项服务的 SERVICE_NAME(内部名)和 DisplayName(显示名),按服务顺序排列

用 PowerShell 获取更完整字段并导出为制表符分隔文本

PowerShell 提供更丰富的属性支持(如状态、启动类型、描述、路径),适合深度运维场景:

  • 运行以下命令(推荐保存为 export-services.ps1):
  • Get-Service | foreach-Object {
      $svc = Get-WmiObject Win32_Service -Filter “Name=’$($_.Name)'”
      “$($_.Name)`t$($_.DisplayName)`t$($_.Status)`t$($svc.StartMode)`t$($svc.PathName)`t$($svc.Description)”
    } | Out-File -Encoding UTF8 services_detailed.txt
  • 生成的 services_detailed.txt 包含:服务名、显示名、当前状态、启动类型、可执行路径、描述,各字段用制表符分隔,可用 excel 或 Notepad++ 直接打开

导出已禁用或非运行服务用于安全审计

排查潜在风险服务(如未启用但存在、手动启动却长期停止的服务)时,可针对性筛选:

  • 仅导出“已停止”且“启动类型为自动”的服务(可能异常):Get-Service | Where-Object {$_.Status -eq ‘Stopped’ -and $_.StartType -eq ‘Automatic’} | select-Object Name,DisplayName,StartType,Status | Export-Csv -NoTypeInformation -Encoding UTF8 stopped_auto.csv
  • 导出所有“禁用”服务:sc query state= all | findstr /C:”DISABLED” /B /A:1 > disabled_services.txt(配合 sc 输出上下文行)

小技巧:一键生成带时间戳的导出文件

避免覆盖历史记录,建议在脚本中加入时间标识:

  • PowerShell 示例:$ts = Get-date -Format “yyyyMMdd_HHmmss”; Get-Service | sort-Object Status,Name | Export-Csv “services_$ts.csv” -NoTypeInformation -Encoding UTF8
  • 生成类似 services_20241025_143022.csv 的文件,便于版本追踪和变更比对
text=ZqhQzanResources