私たちは、おそらくリモートの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 Suite。
- Windows PowerShell 5以上。このチュートリアルではPowerShell v7.1.3を使用しています。
Tasklistを使用してリモートWindowsプロセスをクエリする
Windows XP以降、tasklistという便利なツールがあります。 Tasklistはリモートコンピューター上のプロセスをクエリする役立つツールです。プロセスを終了させる前に、まずそれらを発見する必要があります!
デスクトップでPowerShellセッションまたはコマンドプロンプトを開き、次のコマンドを入力してリモートコンピューター上のすべての実行中のプロセスを表示します。
以下のコマンドは、リモートコンピューター(/S
)に対して管理者のユーザー名(/U
)とパスワード(/P
)で認証された接続をクエリします。
次のように、セッション名が表示されないことに気付くでしょう。リモートコンピューターでtasklist
を実行しているため、tasklist
はセッション名を提供しません。

おそらく、1つのプロセスだけをリストアップすることをお好みかもしれません。問題ありません。それには、/FI
パラメーターを指定します。/FI
パラメーターは、特定のプロセスをフィルタリングするためにtasklist
に渡されるクエリを受け入れます。

PSListを使用してリモートWindowsプロセスをクエリする
実行中のプロセスを表示する別のツールはPSListであり、このユーティリティはSysinternals Suiteの一部です。このツールセットは長年にわたって存在し、AzureのCTOであるMark Russinovichによって作成されました!
では、リモートコンピューターで実行中のプロセスを表示する方法を見ていきましょう。
1. デスクトップでPowerShellセッションまたはコマンドプロンプトを開き、Sysinternal Suiteを展開した場所にディレクトリを変更します。
2. PowerShellセッションで、次のコマンドを実行してリモートコンピューター上で実行中のプロセスと関連するCPU使用率をリアルタイムで表示します。
コマンドは以下の通りです:pslist
を実行して、WIN-BANGJIEFNOC
コンピュータ上のすべてのリモートWindowsプロセスをAdministrator
ユーザー(-u
)とパスワード(-p
)で認証します。
このコマンドでは、-s
スイッチを使用してpslist
を「タスクマネージャーモード」に切り替え、リストを繰り返し更新します。
Sysinternalsツールを初めて使用する場合、EULA(EULA)を受け入れるように求められる場合があります。OKをクリックしてください。
このコマンドを実行した結果、以下の出力が表示されます。この記事では、これらの値のうち3つに関心があります。表示されている通りです。
- 名前: プロセスの名前。
- Pid: プロセス識別子、このチュートリアルで使用される重要な値、PID番号はリモートプロセスを終了させるために使用できます。これはプロセスに割り当てられた数値IDです。
- CPU: これは利用可能なCPU全体のほぼリアルタイムの利用状況を示します。
他の値はメモリ関連で、この記事の範囲外です。

3. ステップ2で-s
スイッチを使用したので、pslist
を終了するにはCtrl-Cを押します。これでコンソールに戻ります。
-e
スイッチを使用してプロセス名を指定して、返されたプロセスのリストを絞り込みます。たとえば、-e Winlogon
。
プロセス名でプロセスを殺すPSKill
リモートプロセスの検出方法を知ったら、それらを終了する方法について見てみましょう。まず、pskill ユーティリティについて説明します。まず、プロセス名でプロセスを終了する方法を学びます。
1. リモートサーバーで終了できるプロセスがあることを確認してください。このチュートリアルではメモ帳プロセスを使用します。
2. ローカルデスクトップでPowerShellセッションまたはコマンドプロンプトを開き、Sysinternal Suiteを展開したディレクトリに移動し、次のコマンドを実行します。 pskill
の構文はpslist
と似ていることがわかります。

3. 前のセクションで説明したように、pslist
を実行して、プロセスが実際に停止していることを確認します。

プロセスIDでプロセスを終了するPSKill
プロセス名でプロセスを終了するのは、そのプロセスの単一のインスタンスが実行されている場合やその名前のすべてのプロセスを終了したい場合には十分かもしれません。実行中のプロセスの特定のインスタンスを終了する必要がある場合はどうなりますか?次の手順で説明します。
1. リモートサーバーでメモ帳を2回開きます。このデモンストレーションではこれらのプロセスの1つを終了します。もちろん、他のプロセスを代替することもできます。
2. 次のコマンドを実行し、以下に示すPidのうちの1つに注意してください。次の手順にその値が必要です。

3. PIDを使用して、最後の引数としてPIDを指定してpskill
を実行します。

4. 最後に、pslist
を再実行して、Notepadのインスタンスが1つだけ実行されていることを確認します。今後、Notepadのインスタンスが1つだけ実行されているはずです。

名前でタスクキルしてリモートWindowsプロセスを終了する
taskkillユーティリティは、Windowsに組み込まれており、ユーザー名やアプリケーション名でプロセスを再起動するためのさらなるコマンドラインオプションを含んでいます。では、Notepadをもう一度終了してみましょう!
名前でプロセスを終了する
1. リモートサーバーでNotepadを開きます。このデモンストレーションでは終了するプロセスはNotepadですが、もちろん他のプロセスを代用することができます。
2. デスクトップ上でPowerShellセッションまたはコマンドプロンプトを開きます。次のコマンドを入力すると、notepad.exeを終了します。
出力は以下の通りです:
/IMはImageのパラメータです。この場合、それはnotepad.exeです。

3. プロセスが停止したことを確認するには、tasklist
を実行します。フィルターに一致するタスクがないことが表示されます。

PIDでタスクキルしてリモートWindowsプロセスを終了する
taskkill
を使用してPIDでプロセスを終了することは、プロセス名を使用するのとほとんど変わりません。ただし、名前を使用できないため、まずPIDを見つけてからそれをtaskkill
に渡す必要があります。
リモートWindowsホストでNotepadが実行されていると仮定します。
1. 以下のようにtasklist
を実行して、NotepadプロセスのPIDを見つけます。次のステップで使用するため、PIDのいずれかをメモしておいてください。

2. 今度は、PIDを最後の引数として指定してtaskkill
を実行します。

3. 最後に、プロセスが停止したことを確認するためにtasklist
を実行します。

PowerShellを使用してリモートWindowsプロセスを終了させる
PowerShellを使用すると、リモートプロセスを終了させるいくつかのオプションがあります。最初のcmdletであるStop-Process
はネイティブでリモートプロセスを終了させることができません。なぜなら、コンピュータ名を指定するオプションがないからです。ただし、Stop-Process
をPowerShellリモートを介してリモートで実行することで、この問題を回避できます。
1. ホストとリモートサーバーがActive Directoryドメインにない場合は、まずユーザー名とパスワードを提供し、PSCredentialオブジェクトを作成します。

2. 次に、チュートリアルではSSLを使用してリモートコンピュータに接続し、自己署名証明書を使用するため、信頼された証明機関の証明書の確認をスキップするPSSessionOptionを作成してください。
3. 現在、Enter-PSSession
コマンドを使用してサーバーに接続します。これはリモートサーバーに対して対話型セッションを確立します。
以下のコマンドは、Credential
で提供されたユーザー名とパスワードを使用して、証明機関のチェックをスキップ(SessionOption
)し、SSLで接続(UseSSL
)します。

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
。ScriptBlock
パラメータにStop-Process
コマンドをカプセル化することで、コマンドがリモートホストに送信されます。
結論
あなたはリモートプロセスを終了するさまざまな方法と、ネットワークファイアウォールルールがユーティリティの正常な動作を妨げる状況を乗り越える方法について学びました。このチュートリアルはWindowsの修正にも役立つかもしれません。
学んだユーティリティは強力なツールです。注意して使用してください!
Source:
https://adamtheautomator.com/how-to-kill-a-windows-process/