查看服务状态、启动类型和依赖,输出 ServiceController 对象。
Get-Service 从服务控制管理器(SCM)读取服务,输出 System.ServiceProcess.ServiceController 对象,常用属性有 Name、DisplayName、Status、StartType、ServicesDependedOn;别名是 gsv 和 service。Status 可能是 Running、Stopped、StartPending、StopPending、Paused 等,StartType 是 Automatic、Manual、Disabled 等。
管道:-Name 可按属性名接收字符串;查询结果可直接管道给 Start-Service、Stop-Service(按 ServiceController 对象绑定)。权限:枚举服务通常所有用户都可以;启动、停止、修改启动类型需要管理员,或服务安全描述符授予的权限。
边界:服务不是进程,一个 svchost.exe 可以承载多个服务,按进程查不到服务名;服务状态是 SCM 快照,StartPending 时不要立即断言失败。版本:5.1 仅 Windows;7.x 在 Windows 上使用同一模块,Linux/macOS 没有 ServiceController,相关命令不可用。
# 1. 列出正在运行的服务,按显示名排序便于人工查找
PS C:\> Get-Service | Where-Object Status -eq 'Running' | Sort-Object DisplayName
# 2. 按显示名通配符查找,名称不确定时很好用
PS C:\> Get-Service -DisplayName '*print*' | Select-Object Name, DisplayName, Status
# 3. 查看单个服务的状态和启动类型
PS C:\> Get-Service Spooler | Select-Object Name, DisplayName, Status, StartType
# 4. 查看某服务依赖哪些服务,排启动顺序问题
PS C:\> Get-Service -Name LanmanServer -RequiredServices | Select-Object Name, Status
# 5. 找“自动启动但当前没运行”的服务,常是故障线索
PS C:\> Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' }
# 6. 导出服务清单,便于对比两台机器
PS C:\> Get-Service | Select-Object Name, Status, StartType | Export-Csv C:\Temp\services.csv -NoTypeInformation
-Name 匹配服务名(如 Spooler),不是显示名(如 Print Spooler);按显示名查用 -DisplayName '*print*'。StartPending/StopPending,等待 Running/Stopped 再判断结果。StartType 和 Status 是两件事:Automatic 只说明开机应启动,当前仍可能 Stopped;Disabled 则无法直接启动。Get-Process svchost 看不到具体服务,排查服务问题用 Get-Service 和事件查看器。sc.exe qfailure <服务名> 查看失败恢复设置。Get-Service;跨平台脚本用 $IsWindows 先判断。Start-Service — 启动指定服务。Stop-Service — 停止服务,-Force 会处理依赖。sc — CMD 的服务控制命令,可查配置和失败恢复。Get-Process — 查看服务宿主进程的资源占用。合上页面,先回答,再展开对照。
Get-Service "Print Spooler" 为什么可能找不到服务?StartType 为 Automatic 是否等于当前正在运行?Spooler,不是显示名;用 -DisplayName '*print*'。StartType 只描述启动方式,当前状态看 Status。-RequiredServices 查看依赖并逐个检查状态;启动失败还可能是账户、路径或超时,需要看事件日志。
小程序版
微信扫码,随时查命令