如何使用 PowerShell 或命令行列出所有 Windows 服务

您在屏幕上看到的正在运行的应用程序只是Windows中正在发生的事情的一小部分。从管理设备驱动程序到确保安全,一堆后台进程维护着一台正常运行的Windows PC。

对于监督多台计算机的任何系统管理员来说,能够查看这些关键服务的状态非常重要。任务管理器(Task Manager)方法对此太慢了,您无法使用脚本将其自动化。

解决方案?命令行工具。使用命令提示符或 PowerShell(Command Prompt or PowerShell),您可以快速了解系统上运行的可操作Microsoft服务,帮助您快速诊断任何问题。 

命令提示符(Command Prompt)中列出Windows 服务(Services)

虽然不如Windows PowerShell灵活或强大,但命令提示符(the Command Prompt)仍然是系统管理员的绝佳工具。您可以使用queryex命令获取活动和禁用服务的状态,然后使用 taskkill 命令(use the taskkill command)结束讨厌的进程。

  1. 要使用 queryex 命令,请以管理员身份运行(Administrator)命令提示符(Command Prompt)。您可以通过在开始菜单中搜索 cmd 找到该应用程序。

  1. 使用 sc queryex 命令的方法有很多种。类型和状态(State)是最常用的两个参数。例如,输入以下命令可查看所有  Windows进程:

sc queryex type=service state=all

  1. 默认视图可能有点压倒性。您可以只显示进程的名称以使列表更易于解析:

sc queryex type=service state=all | find /i “SERVICE_NAME:”

  1. 默认情况下,该命令会列出所有活动进程。要查找不活动的,请修改 state 参数:

sc queryex type=service state=inactive

  1. 您还可以通过名称查询特定进程的状态。这对系统管理员来说非常有用,因为他们可以设置批处理文件来一次检查多个进程。这是一个例子:

sc 查询 DeviceInstall(sc query DeviceInstall)

PowerShell中列出Windows 服务(Services)

PowerShell旨在成为现代Windows的专用命令行 shell 。因此,它通过命令提供对几乎所有操作系统组件的访问,Windows服务也不例外。

PowerShell的优势在于您可以轻松地将其自动化。所有PowerShell命令都可以编译成复杂的脚本,让您可以轻松地在多台 PC 上设置系统管理任务。

  1. 首先(Start)打开PowerShell您可以在开始菜单(Start Menu)中搜索它;只需确保运行提升的实例(即,作为管理员(Administrator))。

  1. 在PowerShell(PowerShell)上列出Windows服务的最简单命令是Get-Service。它显示您计算机上的所有服务,以及它们的状态和名称。唯一的问题是服务列表可能很长。

  1. 使用Get-Service时,最好将列表导出到文本文件。您可以使用管道执行此操作,如下所示:

Get-Service | Out-File “C:\logs\All_Services.txt”

  1. 要查找特定服务的状态,请在Get-Service命令之后使用该服务的名称。您可以通过用逗号分隔它们的名称来请求多个进程的状态。

获取服务 CryptSvc、COMSysApp(Get-Service CryptSvc, COMSysApp)

  1. 管道还可用于将Get-Service cmdlet 与Where-Object函数结合起来,并按(Where-Object)Status过滤结果。以下命令通过获取所有正在运行(Running)的服务来说明这一点:

Get-Service | Where-Object {$_.Status -EQ “Running”}

检查服务依赖关系

任何复杂的流程都被拆分为多个相互依赖的服务。这就是为什么仅仅获得特定服务的状态通常是不够的。您还需要检查服务所依赖的服务的状态。

  1. 要查看特定服务所需的服务,请将-RequiredServices标志与Get-Service cmdlet 一起使用。这是一个例子:

Get-Service -Name CryptSvc –RequiredServices

  1. 同样,要获取依赖于特定服务的服务列表,请利用-DependentServices标志。

Get-Service -Name CryptSvc -DependentServices

这两个标志对于编写脚本以自动启动或停止Windows服务至关重要,因为它们为您提供了一种跟踪与受影响服务连接的所有服务的方法。

列出远程(Remote)计算机上的Windows 服务(Services)

PowerShell方法不限于本地计算机。您也可以使用具有上述相同语法的Get-Service cmdlet 来查询远程 PC 的进程。(Get-Service)只需在(Just)末尾附加-ComputerName标志即可指定要从中检索信息的远程计算机。 

这是一个例子:

获取服务 CryptSvc -ComputerName Workstation7(get-service CryptSvc -ComputerName Workstation7)

PowerShell中管理Windows 服务(Services)

获取服务的状态并不是您在Windows PowerShell(Windows PowerShell)中唯一可以做的事情。作为一个成熟的脚本环境,它提供了所有GUI选项的脚本替代方案。 

Powershell cmdlet 可以停止、启动、重新启动甚至修改服务。结合自动化的 Get-Service(Get-Service)命令,可以编写PowerShell脚本以完全自动化日常系统管理任务。(PowerShell)

  1. 除了查询服务的状态,您还可以使用PowerShell来管理它们。启动或停止服务可以用一个命令完成,只需要服务的名称。例如,这是停止服务的方式:

停止服务名称假脱机程序(Stop-Service -Name Spooler)

  1. 启动服务的过程类似:

启动服务名称假脱机程序(Start-Service -Name Spooler)

  1. 如果服务无法正常工作,您还可以选择重新启动它:

重新启动服务名称假脱机程序(Restart-Service -Name Spooler)

  1. 还有可用于更改服务属性的Set-Service cmdlet。(Set-Service)这里我们禁用Print Spooler(Print Spooler)服务的自动启动:

设置服务“后台处理程序”-StartupType 已禁用(Set-Service ‘Spooler’ -StartupType Disabled)

列出 Windows(List Windows) 服务(Services)的最佳方式是什么?

无论您运行的是Windows 10还是Windows Server,能够查看所有Windows服务的列表都很方便。您可以诊断关键系统功能的问题或停止不必要的 Microsoft 服务以提高性能。

为此,PowerShell是最佳选择。虽然您可以在命令提示符中获取服务列表,但(Command Prompt)PowerShell提供的附加功能更有用。

您可以使用PowerShell cmdlet 获取Windows进程的服务状态,通过它们的状态或其他参数对其进行过滤。确定依赖服务并根据需要启动或停止它们也很容易。



About the author

我是一名专业的音频工程师,拥有超过 10 年的经验。我参与过各种各样的项目,从小型家庭音响系统到大型商业制作。我的技能在于创造出色的配乐和声音处理工具,让音乐听起来很棒。我对 Windows 10 也非常有经验,可以帮助您充分利用您的计算机系统。



Related posts