当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

作者:精品下载站 日期:2024-12-14 13:05:54 浏览:13 分类:玩电脑

用于运行进程的 Steamy PowerShell Get-Process Cmdlet


有兴趣使用 PowerShell Get-Process cmdlet 显示系统正在运行的进程吗?使用Get-Process,您可以找到进程所有者、进程 ID,甚至进程在磁盘上的位置。

在本文中,您将通过实际示例了解如何使用 PowerShell 的 Get-Process cmdlet。如果在 Windows 或 Linux 上争论进程以使其服从您的意愿听起来很有趣,那么请继续阅读!

相关:如何使用 ps、pgrep、pkill 等在 Linux 中终止进程!

先决条件

在继续之前,以下是遵循本文中的示例的必要先决条件。

  • 尽管 Windows PowerShell 5.1 足以满足此处的大多数示例,但 PowerShell 7.1 及更高版本对于 Linux 支持是必需的。

相关:升级到 PowerShell 7:演练

  • 本文使用 Windows 10 和 Ubuntu 20.04 LTS,但任何运行 PowerShell 的操作系统都可以工作。

准备好?让我们深入研究并管理一些流程!

显示正在运行的进程

Get-Process 管理本地进程。在第一个示例中,您使用 PowerShell Get-Process cmdlet。该命令显示所有正在运行的进程。

Get-Process 返回系统正在运行的进程信息的时间点快照。为了显示实时进程信息,Windows提供了Windows任务管理器,Linux提供了top命令。

首先,打开 PowerShell 控制台并运行 Get-Process。请注意,Get-Process 返回正在运行的进程信息,如下所示。 Windows 和 Linux 操作系统的输出格式相同。

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

默认情况下,gpsps 作为 Get-Process 的命令别名存在。由于 PowerShell 7 是跨平台的,因此 ps 命令与内置 Linux 命令发生冲突。因此,ps 无法在 Linux 上运行,只能在 gps 别名上运行。

Get-Process 输出的含义可能不会立即显而易见。下面更详细地描述了默认的 Get-Process 属性。

  • NPM(K) - 进程正在使用的非分页内存量,以千字节为单位显示,如 (K) 表示法所示。
  • PM(M) - 进程正在使用的可分页内存量,以兆字节为单位显示,如 (M) 符号所示。
  • WS(M) - 进程工作集的大小,以兆字节为单位显示。工作集由进程最近引用的内存页面组成。
  • VM(M) - 进程正在使用的虚拟内存量,以兆字节为单位显示。包括磁盘上分页文件的存储。
  • CPU(S) - 该进程在所有进程上使用的处理器时间量,以秒为单位显示。
  • Id - 进程的进程 ID (PID)。
  • SI - 正在运行的进程的会话标识符。会话0表示该进程对所有用户可用,1表示该进程存在于第一个登录的用户下,依此类推。
  • ProcessName - 正在运行的进程的名称。

要显示映射到完整属性名称的属性别名列表,请使用命令 Get-Process | Get-Member -MemberType 'AliasProperty'。

下面是另一个很好的例子。对于它找到的每个 brave 进程实例,它使用该进程的 ID ($_.id) 并将其传递给 ">Get-NetTCPConnection. 然后,PowerShell 使用 Get-NetTCPConnection 查找有关 brave 进程已打开的每个网络连接的信息。

当 Brave 浏览器运行时,在 PowerShell 会话中运行以下代码。

Get-Process -Name brave | ForEach-Object { Get-NetTCPConnection -OwningProcess $_.Id -ErrorAction SilentlyContinue } 

感谢 SystemFrontier 的 Jay Adams!

恭喜,您现在可以使用 Get-Process 查看 Windows 和 Linux 上所有正在运行的进程!

查找特定的流程属性

正如您之前所见,Get-Process 返回正在运行的进程的许多不同属性。与所有其他 PowerShell 对象一样,您可以有选择地挑选对象的属性。

现在让我们通过一个简单的示例来说明如何检索特定进程的特定属性:

  1. 启动您的 Windows 计算器。

2. 打开 PowerShell 控制台后,使用 Name 参数运行 Get-Process,以仅显示以 Calculator 作为名称的所有正在运行的进程。您将看到与之前看到的相同的输出。

Get-Process -Name 'Calculator'

Get-Process 按预期返回许多属性。也许您只想通过 CPU(s) 列下的值查找 CPU 利用率。将 Get-Process 命令用括号括起来,并引用 CPU 属性,如下所示。您会看到它只返回 CPU 属性的值。

(Get-Process -Name 'Calculator').CPU

请注意,Get-Process 返回一个名为 CPU(s) 的名称,上面的代码片段仅使用 CPU 的名称。有时 PowerShell 不会在输出中显示真实的属性名称。这个概念是通过 PS1XML 格式化文件来执行的。

CPU 时间以跨核心的总秒数表示。为了获得更易于理解的数字,请使用Math方法将其四舍五入到最接近的十分之一,如下所示。

$cpu = (Get-Process -Name 'Calculator').CPU
[math]::Round($cpu,2)

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

如果您只想查看进程的 ID,则可以使用上述方法查找任何其他属性,例如 Id

计算器应用程序保持运行。您将在其余示例中使用此应用程序。

检索进程内存使用情况

对运行缓慢的系统进行故障排除可能是一项挑战,原因往往是内存有限。继续使用Calculator应用程序,检索Calculator进程,并仅显示VM属性。如下所示,使用的内存以兆字节 (MB) 为单位显示。

(Get-Process -Name 'Calculator').VM

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

为了帮助了解内存使用情况,请利用内置的 PowerShell 转换乘数将兆字节 (MB) 更改为千兆字节 (GB)。在下面的示例中,您将使用的内存转换为 GB,然后使用 .NET 数学库 Round 方法对值进行舍入,如下面的屏幕截图所示。

$ProcessMemoryGB = (Get-Process -Name 'Calculator').VM
$ProcessMemoryGB / 1GB

# Use the .NET Math type Round method
[Math]::Round($ProcessMemoryGB / 1GB)

使用内置的 PowerShell 实用程序来转换值可以更轻松地理解输出。继续阅读以了解如何查找进程的 ID。

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

暴露鲜为人知的属性

Get-Process 默认情况下并不包含或显示所有属性。请继续阅读下文,了解有关 PathUserName 属性以及如何使用它们的更多信息!

发现进程二进制文件所在的位置

系统上有很多地方可以存储进程可执行文件。如果进程当前正在运行,Get-Process 可以轻松查找进程文件系统路径,尽管默认情况下不显示 Path。如下所示,Path 属性包含进程可执行文件的文件系统位置。

(Get-Process -Name 'Calculator').Path

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

就像在 Windows 中一样,Linux 中的 Get-Process 也返回文件系统路径。在下面的示例中,gnome-calculator 进程正在运行,路径显示在控制台输出中。

(Get-Process -Name 'gnome-calculator').Path

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

狡猾的坏人可能会命名一个与可信进程相同或相似的进程。因此,定位文件系统路径的能力有助于安全事件响应 (IR) 场景。继续阅读以了解如何找到进程所有者,因为默认输出中不包含 UserName

寻找流程所有者

要在输出中包含 UserName 值,您需要使用 IncludeUserName 参数。了解进程所有者非常重要,尤其是为了避免无意中终止另一个用户的进程。如下所示,UserName 属性现在包含在流程输出中。

Get-Process -Name 'Calculator' -IncludeUserName

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

最后,继续阅读以了解如何在远程计算机上使用 Get-Process 来检索进程信息!

查找远程计算机上的进程

尽管在 Windows PowerShell 中,Get-Process 本身没有任何远程功能,但您始终可以利用 PowerShell Remoting 和 Invoke-Command 在远程计算机上运行它。

相关:如何在 Windows 和 Linux 上设置 PSRemoting

但是,如果您使用的是 Linux 或在 Windows 上运行 PowerShell 6,您现在拥有一个可用于查询远程计算机上的进程的 ComputerName 参数。

Get-Process -ComputerName 'remote_computer_name' -ProcessName 'process'

PowerShell 7.x 中删除了 -ComputerName 参数,因为该 cmdlet 与远程处理没有直接关系。要实现相同的目的,您可以将其包装在 Invoke-Command 中,如下所示: Invoke-Command -ComputerName "ComputerName" -ScriptBlock { Get-Process -ProcessName 'process' }

当对远程计算机运行上述命令时,将显示与本地运行 Get-Process 命令相同的输出。

下面是远程连接到另一台计算机并获取正在运行的进程的示例:

[玩转系统] 用于运行进程的 Steamy PowerShell Get-Process Cmdlet

您可以通过用逗号分隔来定位多台计算机,例如Get-Process -ComputerName SRV1,SRV2。

下一步

在本文中,您学习了如何使用 PowerShell Get-Process cmdlet 在本地和远程计算机(Linux 和 Windows)上通过 PowerShell 查找正在运行的进程。

现在,您将利用这些知识做什么?尝试将 Get-Process 检索到的进程传递给本地或远程计算机上的 Stop-Process 来终止!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯