如何在远程系统上终止Windows进程

也许你正在远程Windows服务器上愉快地工作,突然发现一个进程运行失控,占用了宝贵的CPU周期。你会怎么做?终止它!

在这个教程中,你将学到如何使用本机实用工具、第三方工具和PowerShell来终止Windows进程。首先,你将学会如何检查Windows中正在运行的进程,然后终止这些进程。

先决条件

如果你想按照本教程的步骤操作,请确保事先准备好以下内容:

  • A Windows PC – All demos in this tutorial will use Windows 10, but Windows 7+ will work also.
  • A Windows Server or another Windows desktop to use as your target for killing the remote tasks. This tutorial uses a standalone Windows Server 2016 as the remote server.
  • 来自Microsoft的Sysinternals套件
  • Windows PowerShell 5或更高版本。本教程使用PowerShell v7.1.3

使用Tasklist查询远程Windows进程

自Windows XP以来,就有一个有用的工具叫做tasklist。Tasklist是一个方便的工具,可查询远程计算机上的进程。在终止进程之前,你必须先找到它们!

在桌面上打开PowerShell会话或命令提示符,键入以下命令以显示远程计算机上的所有运行进程。

下面的命令查询远程计算机(/S),通过管理员用户名(/U)和密码(/P)进行身份验证。

tasklist /S WIN-BANGJIEFNOC.local.net /U administrator /P password

您会发现下面会话名称未显示。因为您在远程计算机上运行tasklisttasklist不提供会话名称

list of processes on a remote server

也许您更喜欢仅列出单个进程。没问题。为此,请指定/FI参数。/FI参数接受查询,该查询将传递给tasklist以筛选特定进程。

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
The output of tasklist showing a specific process

使用PSList查询远程Windows进程

查看运行进程的另一个工具是PSList,这个实用程序是Sysinternals套件的一部分。这套工具已经存在多年,由Azure的首席技术官Mark Russinovich创建!

让我们开始学习如何在远程计算机上查看运行进程。

1. 在您的桌面上打开一个PowerShell会话或命令提示符,并将目录更改为您提取Sysinternal Suite的位置。

2. 在您的PowerShell会话中,运行以下命令以显示远程计算机上运行的进程以及实时关联的CPU使用情况。

以下命令在WIN-BANGJIEFNOC计算机上以Administrator用户名(-u)和密码(-p)进行身份验证,运行pslist以查询所有远程Windows进程。

该命令使用-s开关将pslist切换到“任务管理器模式”,以重复更新列表。

如果这是您第一次使用Sysinternals工具,可能会出现一个横幅,询问您是否接受EULA;点击确定。

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -s

现在,您会看到运行该命令后的以下输出;对于本文,您关注这些值中的3个。如下所示。

  • 名称:进程的名称。
  • Pid:进程标识符,本教程中使用的关键值,PID号码可用于终止远程进程。它是分配给进程的数字标识符。
  • CPU:这显示了您整体可用CPU的近实时利用率。

其他值与内存相关,超出了本文的范围。

Output in real-time of pslist

3.由于第二步使用了-s开关,请按Ctrl-C退出pslist以返回到控制台。

通过使用-e开关,后跟进程名称,缩小由pslist返回的进程列表,例如-e Winlogon

使用 PSKill 按进程名称终止进程

一旦您知道如何查找远程进程,现在让我们深入了解如何终止它们。首先,让我们介绍一下 pskill 实用程序。首先,学习如何按进程名称终止进程。

1. 确保您在远程服务器上有一个可以终止的进程。本教程将使用记事本进程。

2. 在本地桌面上打开 PowerShell 会话或命令提示符,并将目录更改为您提取 Sysinternal Suite 的位置,然后运行以下命令。您可以看到 pskill 的语法与 pslist 类似。

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p 'password' -e notepad.exe
Output of pskill

3. 现在,运行 pslist,如前一节所述,以确认进程确实已停止。

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p 'password' -e notepad.exe
Output of pslist

使用 PSKill 按进程 ID 终止进程

按名称终止进程可能足够满足您的需求,如果只有一个该进程的实例正在运行,或者您想终止所有具有该名称的进程。如果您要终止正在运行的进程的特定实例呢?以下步骤将演示此过程。

1. 在您的远程服务器上,打开记事本两次;您将在此演示中终止其中一个进程;当然,您也可以替换其他进程。

2. 运行以下命令,请注意下面显示的一个 Pid,您需要用它来执行下一步。

.\pslist \\WIN-BANGJIEFNOC.local.net -u Administrator -p password -e notepad
Using pslist to list PID’s of Notepad

3. 使用PID,现在运行 pskill,将PID作为最后一个参数提供。

.\pskill.Exe \\WIN-BANGJIEFNOC.local.net -u administrator -p password 1984
The output of pskill for a particular PID

4. 最后,通过重新运行 pslist 检查是否仍然有一个 Notepad 实例在运行。现在你应该只能看到一个 Notepad 实例在运行。

Output of pslist

使用 TaskKill 按名称终止远程Windows进程

taskkill 实用程序是 Windows 的本机工具,还包括通过用户名和应用程序名称重新启动进程的其他命令行选项。让我们开始并再次终止 Notepad!

按名称终止进程

1. 在远程服务器上打开 Notepad;在此演示中,您将终止 Notepad 进程;当然,您可以替换为其他进程。

2. 在桌面上打开 PowerShell 会话或命令提示符。键入以下命令将终止 notepad.exe

taskkill /S WIN-BANGJIEFNOC.local.net /you administrator /p password /IM notepad.exe

输出如下所示:

/IM 是 Image 的参数;在这种情况下,它是 notepad.exe

The output of taskkill command

3. 为确认进程是否已停止,运行 tasklist。现在,您应该看不到匹配该筛选器的任务。

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
Output of tasklist using imagename

通过PID使用 TaskKill 终止远程Windows进程

使用 PID 使用 taskkill 终止进程与使用进程名称并无太大区别。但是,由于不能使用名称,您首先需要找到 PID,然后将其传递给 taskkill

假设您的远程 Windows 主机上有 Notepad 运行:

1. 运行如下所示的tasklist命令来查找记事本进程的PID。记下其中一个PID,如下所示;你需要它来进行下一步操作。

tasklist /S WIN-BANGJIEFNOC.local.net /fi "imagename eq notepad.exe" /U administrator /P 'password'
the output of tasklist to view PIDS

2. 现在,运行taskkill并将PID作为最后一个参数提供。

taskkill /S WIN-BANGJIEFNOC.local.net /u administrator /p 'password' /PID 3776
The output of taskkill specifying a particular PID

3. 最后,运行tasklist来确认进程是否已停止。

Output of tasklist

使用PowerShell终止远程Windows进程

PowerShell为您提供了几个终止远程进程的选项;第一个命令Stop-Process不能直接终止远程进程,因为它没有指定计算机名称的选项。但是,您可以通过PowerShell远程远程运行Stop-Process来解决此问题。

1. 如果您的主机和远程服务器不在活动目录域中,请首先提供用户名和密码,创建一个PSCredential对象。

$credentials = Get-Credential
Setting up credentials

2. 接下来,由于本教程将使用SSL连接到远程计算机并使用自签名证书,创建一个PSSessionOption,该选项将跳过受信任证书颁发机构的证书检查。

$PSSessionOption = New-PSSessionOption -SkipCACheck

3. 现在,使用Enter-PSSession命令连接到服务器,该命令将在远程服务器上建立一个交互式会话。

下面的命令是连接到WIN-BANGJIEFNOC.local.net计算机,使用上面提供的用户名和密码(Credential),跳过证书颁发机构的检查(SessionOption),并通过SSL连接(UseSSL)。

Enter-PSSession -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -SessionOption $PSSessionOption -UseSSL
Using Enter-PsSession for an interactive session

4. 连接到远程主机后,通过运行Get-Process检查要终止的进程。在本例中,您将看到notepad进程。

Get-Process -ProcessName Notepad
Output of Get-Process

5. 要终止此进程,请运行Stop-Process,如下所示。

Stop-Process -ProcessName Notepad

6. 最后,通过重新运行Get-Process确认您已终止该进程,您应该会收到错误消息。

Checking for Notepad as a running process

如果您想非交互地停止远程Windows进程,请使用Invoke-Command命令 使用以下参数:Invoke-Command -ComputerName WIN-BANGJIEFNOC.local.net -Credential $credentials -ScriptBlock {Stop-Process -ProcessName notepad} -UseSSL。将Stop-Proces命令封装在ScriptBlock参数中将命令发送到远程主机。

结论

你已经了解了关于终止远程进程的不同方法,以及如何克服网络防火墙规则可能阻止实用程序正常工作的情况;本教程还可能帮助你解决了Windows的一些问题。

你所学到的实用程序是强大的工具,请谨慎使用!

Source:
https://adamtheautomator.com/how-to-kill-a-windows-process/