如何在 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-Process
或 gps
时,PowerShell 开始进行系统范围的查询,以收集有关所有活动进程的信息。这些命令中没有参数,意味着 PowerShell 不会应用任何过滤器,并检索每个进程的详细信息。
PowerShell 然后收集每个正在运行的进程的详细数据。这些数据包括描述这些进程状态和特征的各种属性。
PowerShell 将其格式化为表格以进行显示。这种表格格式旨在以清晰且易读的方式呈现信息。
表格通常包括几个关键列:
Id
: 此列显示进程标识符(PID
),这是分配给每个进程的唯一数字标签。PID
对于唯一标识和管理特定进程至关重要。ProcessName
: 这是启动该进程的可执行文件的名称。它有助于轻松识别进程,特别是对于知名应用程序。CPU(s)
: 这里显示的是进程消耗的 CPU 时间。这是以秒为单位进行测量的,对于评估哪些进程使用了大量 CPU 资源、可能影响系统性能至关重要。PM(K)
: 这是以千字节表示的“分页内存”。它表示进程所使用的可以分页到磁盘的内存大小。此指标对于监控进程的内存使用情况非常重要,这对性能调整和资源管理至关重要。
检索单个进程的信息
在使用 PowerShell 检索特定进程的信息时,我们有几种语法选项。Get-Process -Name processName
和 Get-Process processName
都是有效的,且得到相同的结果,但它们在语法结构上略有不同。
Get-Process -Name typora
或
Get-Process typora
当我们执行 Get-Process -Name typora
或 Get-Process typora
时,PowerShell 会过滤正在运行的进程,并返回特定于名为 typora
的进程的信息。当我们知道我们感兴趣的进程的确切名称时,这尤其有用。
在底层,PowerShell 会遍历所有进程的列表,并将进程名称与 typora
进行匹配。如果该进程正在运行,其详细信息将会显示。
输出:
检索多个进程的信息
当我们在 PowerShell 中使用 Get-Process
命令来检索多个进程的信息时,比如命令 Get-Process NotePad, Outlook
,我们正在利用 PowerShell 同时处理多个项目的能力。
Get-Process NotePad, Outlook
通过运行 Get-Process NotePad, Outlook
,我们指示 PowerShell 同时获取多个进程的详细信息,在这种情况下是 NotePad
和 Outlook
。当我们需要监控多个特定进程时,此命令非常方便。
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 使用信息。这些命令演示了我们如何从进程对象中提取特定数据点。
输出:
显示进程所有者
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 环境中的进程。
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.