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

[玩转系统] PowerShell 检查进程是否正在运行 [4 种方法]

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

PowerShell 检查进程是否正在运行 [4 种方法]


[玩转系统] PowerShell 检查进程是否正在运行 [4 种方法]

使用 Get-Process Cmdlet

使用 Get-Process cmdlet 检查进程是否正在 PowerShell 中运行。使用Get-Process cmdlet,我们可以显示系统上运行的进程列表。

使用 Get-Process cmdlet:

Get-Process

输出 :

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    470      26    19184      32148       0.38   4464   7 ApplicationFrameHost
    618      44    28960       1496       0.97  10964   7 CalculatorApp
    404      21    93572     146764      11.17   1800   7 chrome
    247      18    19176      32068       0.11   1816   7 chrome
    139       7     1576       8944       0.08  14540   7 CompPkgSrv
    166      11     6956      10184       0.19  11416   7 conhost
 ....

我们可以观察到 Get-Process cmdlet 检索了系统上当前运行的进程的所有信息。从上面的列表中,我们只需要 ProcessName;它显示进程的名称。如果您想了解其他列,请查看此文档。

Linux 和 Windows 操作系统的 Get-Process cmdlet 输出相同。

现在,让我们深入了解更多细节。这是查看所有正在运行的进程列表的一种方法。有多种方法可以检查特定进程是否正在 PowerShell 中运行。一旦识别出进程,就可以对其执行各种操作。

考虑一个场景,您想要检查 chrome 是否正在您的系统上运行;如果是,则在系统上显示消息“Chrome is running”;否则,显示“Chrome 未运行”

使用 Get-Process cmdlet:

#Check if a process named "chrome" is running
if (Get-Process -Name chrome -ErrorAction SilentlyContinue) {
    Write-Host "Chrome is running."
} else {
    Write-Host "Chrome is not running."
}

输出 :

Chrome is running.

在此示例中,Get-Process cmdlet 与 -Name 参数一起使用来指定任务名称,该名称设置为 chrome 以检查它的状态,是否正在运行。当然,您可以将 chrome 替换为您要检查的进程名称。这里,-ErrorAction SilentlyContinue参数是可选的;它用于避免在给定进程未运行时显示错误。

默认情况下,gpsps 别名可用于执行 Get-Process cmdlet。但是,在跨平台并在 Linux 上运行的 PowerShell 7 中,ps 命令与内置的 Linux 命令发生冲突。因此,ps 命令在 Linux 上不起作用,但在 gps 别名上起作用。

Tasklist 命令与 Where-Object Cmdlet 结合使用

使用 Tasklist 命令和 Where-Object cmdlet 来检查进程是否正在 PowerShell 中运行。

将 Tasklist 命令与Where-Object cmdlet 结合使用:

#Check if a process named "notepad" is running
if (Tasklist | Where-Object { $_.ProcessName -eq "notepad" }) {
    Write-Host "Notepad is running."
} else {
    Write-Host "Notepad is not running."
}

输出 :

Notepad is running.

在此示例中,Tasklist 命令检索系统上运行的进程列表,该列表使用 Where-Object cmdlet 通过管道传输输出。

在 PowerShell 中,Where-Object cmdlet 根据指定条件筛选对象。在本例中,它会过滤 Tasklist 输出并查找 ProcessName 属性等于 notepad 的进程。

在上面的示例中观察发现了进程,并且屏幕上显示了“Notepad is running.”消息。

Get-WmiObject Cmdlet 与 Win32_Process 类结合使用

使用 Get-WmiObject cmdlet 和 Win32_Process 类来检查进程是否正在 PowerShell 中运行。

将 Get-WmiObject 与 Win32_Process 结合使用:

#Check if a process named "firefox" is running
if (Get-WmiObject Win32_Process | Where-Object {$_.Name -eq "firefox.exe"}) {
    Write-Host "Firefox is running."
} else {
    Write-Host "Firefox is not running."
}

输出 :

Firefox is not running.

上述 PowerShell 代码使用 Get-WmiObject cmdlet 通过 Win32_Process WMI (Windows Management Instrumentation) 类检索有关正在运行的进程的信息。 Win32_Process 类表示 Windows 操作系统上的进程。 然后,Where-Object cmdlet 根据Name 属性筛选集合,以仅检索名称中包含 firefox.exe 的进程。

Get-CimInstance Cmdlet 与 Win32_Process 类结合使用

使用 Get-CimInstance cmdlet 和 Win32_Process 类来检查进程是否正在 PowerShell 中运行。

将 Get-CimInstance 与 Win32_Process 结合使用:

#Check if a process named "GoogleDriveFS" is running
if (Get-CimInstance Win32_Process | Where-Object {$_ -like "*GoogleDriveFS*"}){
    Write-Host "GoogleDriveFS is running."
} else {
    Write-Host "GoogleDriveFS is not running."
}

输出 :

GoogleDriveFS is running.

这个例子与上面的例子类似。此处,Get-CimInstance cmdlet 与 Win32_Process 类一起使用来获取有关正在运行的进程的信息。与上面的示例类似,Where-Object cmdlet 根据给定条件过滤正在运行的进程列表。在上述情况下,它过滤了名称中包含 GoogleDriveFS 的进程。

Get-CimInstance cmdlet 类似于 Get-WmiObject cmdlet,但使用更现代的 WS-Man(Web 管理服务)协议进行通信。这使其更加高效并实现资源的跨平台管理。

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

取消回复欢迎 发表评论:

关灯