如何在 PowerShell 中获取正在运行的进程列表

  1. 使用 Get-Process 命令显示 PowerShell 中正在运行进程的列表
  2. 结论
如何在 PowerShell 中获取正在运行的进程列表

本文深入探讨了 PowerShell 在进程监控中的应用,强调了 Get-Process 命令。Get-Process 命令是进程管理中的基础,提供了 Windows 计算机上正在运行的进程的全面视图,显示了关键的信息,如进程 ID、名称、内存使用情况和 CPU 消耗。

文章系统地展开了命令的语法和参数,满足一般和特定进程查询的需求。

使用 Get-Process 命令显示 PowerShell 中正在运行进程的列表

在 PowerShell 环境中有超过 200 个可用的命令。每个命令负责执行特定的功能。

Get-Process 是一个常用的命令,有助于检索 Windows 计算机上正在运行的进程列表。

该命令提供了与每个进程相关的有用信息,如进程 ID、名称、内存使用情况等。此外,它显示了系统正在运行的进程的快照。

语法:

Get-Process [[-ProcessName] string[]] [-NameOfTheComputer string[]]
[-FileVersionInfo] [-Module] [CommonParameters]

Get-Process -processID Int32[] [-ComputerName string[]]
[-FileVersionInfo] [-Module] [CommonParameters]

Get-Process -ProcessInputObject Process[] [-ComputerName string[]]
[-FileVersionInfo] [-Module] [CommonParameters]

参数:

  • ProcessName string[]: 指定要获取的进程名称数组。此参数接受通配符字符进行模式匹配。如果省略此参数,Get-Process 会检索所有进程。
  • ProcessId Int32[]: 指定要检索的进程的进程 ID。此参数允许您直接针对特定进程。
  • InputObject Process[]: 指定进程对象的数组。此参数允许您将进程对象传递给 Get-Process
  • NameOfTheComputer string[]: 指定要运行命令的计算机名称。如果省略此参数,Get-Process 会从本地计算机检索进程。
  • FileVersionInfo: 将文件版本信息添加到进程对象中。当您想获取进程可执行文件的详细信息,如版本、产品名称等时,这很有用。
  • Module: 包含每个进程加载的模块(DLL 和可执行文件)。这有助于进行更详细的分析,例如检查进程加载了哪些 DLL。
  • [CommonParameters]: 这些是所有命令支持的参数,如 -Verbose-Debug-ErrorAction-ErrorVariable-OutVariable-OutBuffer-PipelineVariable

这些参数是 Get-Process 命令的可选项,您可以根据需要使用这些参数。

显示所有正在运行的进程

我们可以直接使用 Get-Process 命令而不带任何参数。它应显示当时所有正在运行的进程。

此外,可以使用 gps 别名代替 Get-Process 命令。

Get-Process
gps

输出:

显示所有正在运行的进程

在执行 Get-Processgps 时,PowerShell 开始进行系统范围的查询,以收集有关所有活动进程的信息。这些命令中没有参数,意味着 PowerShell 不会应用任何过滤器,并检索每个进程的详细信息。

PowerShell 然后收集每个正在运行的进程的详细数据。这些数据包括描述这些进程状态和特征的各种属性。

PowerShell 将其格式化为表格以进行显示。这种表格格式旨在以清晰且易读的方式呈现信息。

表格通常包括几个关键列:

  1. Id: 此列显示进程标识符(PID),这是分配给每个进程的唯一数字标签。PID 对于唯一标识和管理特定进程至关重要。
  2. ProcessName: 这是启动该进程的可执行文件的名称。它有助于轻松识别进程,特别是对于知名应用程序。
  3. CPU(s): 这里显示的是进程消耗的 CPU 时间。这是以秒为单位进行测量的,对于评估哪些进程使用了大量 CPU 资源、可能影响系统性能至关重要。
  4. PM(K): 这是以千字节表示的“分页内存”。它表示进程所使用的可以分页到磁盘的内存大小。此指标对于监控进程的内存使用情况非常重要,这对性能调整和资源管理至关重要。

检索单个进程的信息

在使用 PowerShell 检索特定进程的信息时,我们有几种语法选项。Get-Process -Name processNameGet-Process processName 都是有效的,且得到相同的结果,但它们在语法结构上略有不同。

Get-Process -Name typora

Get-Process typora

当我们执行 Get-Process -Name typoraGet-Process typora 时,PowerShell 会过滤正在运行的进程,并返回特定于名为 typora 的进程的信息。当我们知道我们感兴趣的进程的确切名称时,这尤其有用。

在底层,PowerShell 会遍历所有进程的列表,并将进程名称与 typora 进行匹配。如果该进程正在运行,其详细信息将会显示。

输出:

获取-进程 -名称

检索多个进程的信息

当我们在 PowerShell 中使用 Get-Process 命令来检索多个进程的信息时,比如命令 Get-Process NotePad, Outlook,我们正在利用 PowerShell 同时处理多个项目的能力。

Get-Process NotePad, Outlook

通过运行 Get-Process NotePad, Outlook,我们指示 PowerShell 同时获取多个进程的详细信息,在这种情况下是 NotePadOutlook。当我们需要监控多个特定进程时,此命令非常方便。

PowerShell 执行与单进程命令类似的操作,但对于每个指定的进程名称,显示所有匹配项。

输出:

获取多个进程

此外,您可以对进程名称使用通配符。

根据给定属性检索进程对象

当需要时,我们可以显示特定属性的进程对象信息。让我们仅检索 NotePad 进程的 Process ID

(Get-Process NotePad).Id

在命令 (Get-Process NotePad).Id 中,我们首先获取 NotePad 的进程对象,然后访问其 Id 属性。当我们仅对某个进程的特定信息(如其 Process ID)感兴趣时,这种技术是有用的。

输出:

检索具有给定属性的进程对象

同样,我们可以检索 NotePad 进程的 CPU 时间属性,如下所示。

(Get-Process NotePad).CPU

类似地,(Get-Process NotePad).CPU 检索 NotePad 进程的 CPU 使用信息。这些命令演示了我们如何从进程对象中提取特定数据点。

输出:

获取进程 CPU

显示进程所有者

Get-Process 命令的默认输出并不显示 ProcessOwner 属性。但当您需要终止特定进程时,这可能是一条有价值的信息。

我们可以使用 -IncludeUserName 参数将 ProcessOwner 属性包含在输出中。

Get-Process -Name notepad -IncludeUserName

命令 Get-Process -Name notepad -IncludeUserName 通过在输出中包含进程所有者的用户名,扩展了 Get-Process 的默认行为。当我们需要确定哪个用户正在运行特定进程时,-IncludeUserName 参数至关重要,这在多用户环境或故障排除中可能非常关键。

该命令增强了我们对进程的可见性,尤其是在所有权方面。

输出:

获取-进程包括用户名

结论

这本全面的指南阐明了 PowerShell 在管理和监控系统进程方面的强大和多功能性。我们从列出所有正在运行的进程开始,探讨了 Get-Process 命令的实际应用,定位特定进程并深入提取特定进程属性。

该文章还展示了 PowerShell 处理多个进程的能力以及集成用户中心信息(如进程所有权)的便利性。

Get-Process 命令的这一整合突显了 PowerShell 在进程管理领域的强大和适应性,为系统管理员提供了一系列工具,以有效地监控、分析和管理 Windows 环境中的进程。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.