リモートシステムで 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 Suite
  • 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

次のように、セッション名が表示されないことに気付くでしょう。リモートコンピューターでtasklistを実行しているため、tasklistセッション名を提供しません。

list of processes on a remote server

おそらく、1つのプロセスだけをリストアップすることをお好みかもしれません。問題ありません。それには、/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 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をクリックしてください。

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

このコマンドを実行した結果、以下の出力が表示されます。この記事では、これらの値のうち3つに関心があります。表示されている通りです。

  • 名前: プロセスの名前。
  • Pid: プロセス識別子、このチュートリアルで使用される重要な値、PID番号はリモートプロセスを終了させるために使用できます。これはプロセスに割り当てられた数値IDです。
  • CPU: これは利用可能なCPU全体のほぼリアルタイムの利用状況を示します。

他の値はメモリ関連で、この記事の範囲外です。

Output in real-time of pslist

3. ステップ2で-sスイッチを使用したので、pslistを終了するにはCtrl-Cを押します。これでコンソールに戻ります。

-eスイッチを使用してプロセス名を指定して、返されたプロセスのリストを絞り込みます。たとえば、-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

プロセスIDでプロセスを終了するPSKill

プロセス名でプロセスを終了するのは、そのプロセスの単一のインスタンスが実行されている場合やその名前のすべてのプロセスを終了したい場合には十分かもしれません。実行中のプロセスの特定のインスタンスを終了する必要がある場合はどうなりますか?次の手順で説明します。

1. リモートサーバーでメモ帳を2回開きます。このデモンストレーションではこれらのプロセスの1つを終了します。もちろん、他のプロセスを代替することもできます。

2. 次のコマンドを実行し、以下に示すPidのうちの1つに注意してください。次の手順にその値が必要です。

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

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

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

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

Output of pslist

名前でタスクキルしてリモート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でタスクキルしてリモートWindowsプロセスを終了する

taskkillを使用してPIDでプロセスを終了することは、プロセス名を使用するのとほとんど変わりません。ただし、名前を使用できないため、まずPIDを見つけてからそれをtaskkillに渡す必要があります。

リモートWindowsホストでNotepadが実行されていると仮定します。

1. 以下のようにtasklistを実行して、Notepadプロセスの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. 今度は、PIDを最後の引数として指定してtaskkillを実行します。

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を使用すると、リモートプロセスを終了させるいくつかのオプションがあります。最初のcmdletであるStop-Processはネイティブでリモートプロセスを終了させることができません。なぜなら、コンピュータ名を指定するオプションがないからです。ただし、Stop-ProcessPowerShellリモートを介してリモートで実行することで、この問題を回避できます。

1. ホストとリモートサーバーがActive Directoryドメインにない場合は、まずユーザー名とパスワードを提供し、PSCredentialオブジェクトを作成します。

$credentials = Get-Credential
Setting up credentials

2. 次に、チュートリアルではSSLを使用してリモートコンピュータに接続し、自己署名証明書を使用するため、信頼された証明機関の証明書の確認をスキップするPSSessionOptionを作成してください。

$PSSessionOption = New-PSSessionOption -SkipCACheck

3. 現在、Enter-PSSessionコマンドを使用してサーバーに接続します。これはリモートサーバーに対して対話型セッションを確立します。

以下のコマンドは、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} -UseSSLScriptBlockパラメータにStop-Processコマンドをカプセル化することで、コマンドがリモートホストに送信されます。

結論

あなたはリモートプロセスを終了するさまざまな方法と、ネットワークファイアウォールルールがユーティリティの正常な動作を妨げる状況を乗り越える方法について学びました。このチュートリアルはWindowsの修正にも役立つかもしれません。

学んだユーティリティは強力なツールです。注意して使用してください!

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