也许你正在愉快地在远程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
,tasklist
不會提供會話名稱。

也許您只想列出單個進程,這沒問題。要做到這一點,請指定/FI
參數。/FI
參數接受一個查詢,該查詢將傳遞給tasklist
以過濾特定進程。

使用PSList查詢遠程Windows進程
另一個查看運行進程的工具是PSList,這個實用程序是Sysinternals Suite的一部分。這套工具組已經存在多年,由Azure的CTO Mark Russinovich創建!
讓我們開始介紹如何查看遠程計算機上的運行進程。
1. 在您的桌面上打開PowerShell會話或命令提示符,並將目錄更改為您提取Sysinternal Suite的位置。
2. 在PowerShell會話中運行以下命令,以實時顯示遠程計算機上運行的進程和相關CPU使用情況。
下面的命令运行pslist
来查询在WIN-BANGJIEFNOC
计算机上认证为Administrator
用户名(-u
)和密码(-p
)的所有远程Windows进程。
该命令使用-s
开关将pslist
转换为“任务管理器模式”,可以重复更新列表。
如果这是您首次使用Sysinternals工具,可能会出现一个要求您接受EULA的横幅;点击“确定”。
现在您会看到从运行该命令后的以下输出;本文只关心其中的3个值。如下所示。
- 名称:进程的名称。
- Pid:进程标识符,在本教程中使用的一个关键值,PID号可以用于终止远程进程。它是分配给一个进程的数字ID。
- CPU:这显示了您整体可用CPU的实时利用率。
其他值与内存有关,超出了本文的范围。

3. 由于第二步使用了-s
开关,按Ctrl-C退出pslist
返回到控制台。
通过使用
-e
开关后跟进程名称来缩小返回的进程列表,例如-e Winlogon
。
使用PSKill按進程名稱終止進程
一旦您知道如何查找遠程進程,現在讓我們深入了解如何終止它們。首先,讓我們介紹一下pskill 實用程序。首先,學習如何按進程名稱終止進程。
1. 確保您在遠程服務器上有一個可以終止的進程。本教程將使用記事本進程。
2. 在本地桌面上打開PowerShell會話或命令提示符,將目錄更改為您提取Sysinternal套件的位置,然後運行以下命令。您可以看到pskill
的語法與pslist
類似。

3. 現在,運行pslist
,如前一節所述,以確認進程確實已停止。

使用PSKill按進程ID終止進程
如果只運行一個特定進程的單個實例,或者您想終止所有具有相同名稱的進程,則按名稱終止進程可能已經足夠。那麼,如果您要終止運行中的特定進程實例呢?以下步驟將演示這一點。
1. 在遠程服務器上打開記事本兩次;在此演示中,您將終止其中一個進程;當然,您也可以替換其他進程。
2. 執行以下命令,注意下面顯示的其中一個Pid;您需要這個值進行下一步操作。

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

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

使用TaskKill按名称结束远程Windows进程
taskkill实用程序是Windows的本机工具,还包括根据用户名和应用程序名称重新启动进程的其他命令行选项。让我们开始并再次结束Notepad!
按名称结束进程
1. 在远程服务器上打开Notepad;在本演示中,您将结束的进程是Notepad;当然,您也可以替换为其他进程。
2. 在桌面上打开PowerShell会话或命令提示符。键入以下命令将结束notepad.exe
输出如下:
/IM是Image的参数;在本例中是notepad.exe

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

使用TaskKill按PID结束远程Windows进程
使用PID结束进程与使用进程名称并没有太大区别。但是,由于您无法使用名称,您首先需要找到PID,然后将其传递给taskkill
。
假设您在远程Windows主机上运行Notepad:
1. 執行以下命令tasklist
以查找記事本進程的PID。注意其中一個PID,您需要它進行下一步操作。

2. 現在,執行taskkill
,並將PID作為最後一個參數提供。

3. 最後,執行tasklist
來確認進程已停止。

使用PowerShell在遠程Windows系統中終止進程
PowerShell為您提供了幾種終止遠程進程的選項;第一個cmdletStop-Process
無法原生地終止遠程進程,因為它沒有選項來指定計算機名稱。但是,您可以通過遠程運行Stop-Process
來解決此問題,使用PowerShell遠程管理。
1. 如果您的主機和遠程服務器不在Active Directory域中,首先提供用戶名和密碼,創建PSCredential對象。

2. 接下來,由於教學將使用 SSL 連接到遠程計算機並使用自簽名憑證,請創建一個 PSSessionOption,以跳過對受信任的憑證機構進行檢查。
3. 現在,使用 Enter-PSSession
命令連接到服務器,該命令建立了與遠程服務器的交互會話。
以下命令將使用上面提供的用戶名和密碼(Credential
),跳過憑證機構檢查(SessionOption
),並通過 SSL 連接到 WIN-BANGJIEFNOC.local.net
計算機。

4. 連接到遠程主機後,運行 Get-Process
命令檢查要終止的進程。在這種情況下,您將看到 notepad
進程。

5. 要終止此進程,請運行下面的 Stop-Process
。
6. 最後,通過重新運行 Get-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/