PowerShell

PowerShellでウィンドウやアプリケーションを閉じる方法

PowerShellを使ってウィンドウやアプリケーションを終了する方法をわかりやすく解説します。

基本的なコマンドの使い方やプロセスの停止方法を具体例を交えて紹介し、日常のタスク管理や自動化作業に役立つ操作手順を説明しています。

PowerShellの基礎操作

プロセス一覧の確認方法

PowerShellでは実行中の全プロセスを簡単に確認できます。

代表的なコマンドとして、Get-Processを使用する方法があります。

ターミナルやPowerShellコンソールに以下のコマンドを入力することで、現在動作中のプロセス一覧が表示されます。

# 現在実行中のプロセス一覧を表示する

Get-Process
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  ProcessName
-------  ------    -----      -----     ------     --  -----------
   123      45    10240      20480       0.50   1234  powershell
   456      78    20480      40960       1.25   5678  notepad
   ...     ...      ...        ...         ...    ...  ...

プロセス情報の取得手法

プロセスに関する詳細な情報が必要な場合、Get-ProcessSelect-Objectを組み合わせる方法が利用できます。

たとえば、特定のプロセス名に対してCPU使用率や開始時刻などを表示する場合、以下のようにコマンドを実行します。

# 特定のプロセス "powershell" の詳細情報を取得する例

Get-Process powershell | Select-Object -Property Name, Id, CPU, StartTime
Name         Id   CPU     StartTime
----         --   ---     ---------
powershell  1234  0.75    2023/10/01 10:00:00
powershell  5678  1.20    2023/10/01 11:15:00

ウィンドウ・アプリケーションの終了方法

Stop-Processコマンドの利用

Stop-Processコマンドは、不要なプロセスや誤作動しているプロセスを終了する際に利用します。

強制終了となるため、データの損失などに注意しながら利用してください。

ここではプロセスIDやプロセス名を指定する方法を説明します。

プロセスID指定による終了

プロセスIDを指定して終了する方法は、対象のプロセスが一意に決定できる場合に有効です。

下記のコマンド例では、プロセスIDが1234のプロセスを終了します。

# プロセスIDが1234のプロセスを終了する例

Stop-Process -Id 1234
# 特定の出力は表示されませんが、プロセスが正常に終了した場合はエラーメッセージは返りません。

プロセス名指定による終了

プロセス名を指定して終了する場合、同名の複数プロセスが存在する可能性があります。

そのため、意図するプロセスがすべて終了する点に注意が必要です。

以下は、プロセス名notepadのプロセスを終了する例です。

# プロセス名がnotepadのプロセスを終了する例

Stop-Process -Name notepad
# プロセスが正常に終了していればエラーは表示されません。

ウィンドウ終了とプロセス終了の違い

ウィンドウを閉じる操作と、プロセス自体を終了する操作には明確な違いがあります。

ウィンドウを閉じる場合、アプリケーションが内部で終了処理を行い、保存確認などの処理が実行されることがあります。

一方、Stop-Processを利用するとプロセスが強制終了されるため、未保存のデータが失われる可能性があります。

用途に応じて適切な方法を選択してください。

応用操作

単一ウィンドウの終了方法

ウィンドウを持つアプリケーションに対しては、ウィンドウに対する終了メッセージを送る方法も利用できます。

たとえば、ユーザーインターフェースを持つアプリケーションの場合、Windows APIを呼び出して特定のウィンドウにWM_CLOSEメッセージを送る方法があります。

以下のサンプルは、ウィンドウタイトルに「メモ帳」が含まれるウィンドウを閉じる例です。

# 指定したウィンドウタイトルを持つウィンドウを閉じる例

Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Win32 {
    [DllImport("user32.dll")]
    public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
}
"@

# 閉じたいウィンドウのタイトルの一部を指定

$windowTitle = "メモ帳"

# ウィンドウハンドルを取得する

$targetProcess = Get-Process | Where-Object { $_.MainWindowTitle -like "*$windowTitle*" }
if ($targetProcess) {
    $handle = $targetProcess.MainWindowHandle
    $WM_CLOSE = 0x0010
    [Win32]::PostMessage($handle, $WM_CLOSE, [IntPtr]::Zero, [IntPtr]::Zero)
}
# 正常にメッセージが送信されれば、対象のウィンドウは閉じられます。

複数プロセスの一括終了

スクリプトへの組み込み例

複数のプロセスを一括で終了する場合、対象プロセスを条件で抽出し、ループ処理でStop-Processを実行する方法が有効です。

たとえば、プロセス名notepadのすべてのインスタンスを終了するスクリプト例は以下の通りです。

# 複数のプロセスを一括終了するスクリプト例

$processName = "notepad"

# 指定したプロセス名のプロセス一覧を取得

$processes = Get-Process -Name $processName -ErrorAction SilentlyContinue
if ($processes) {
    foreach ($proc in $processes) {

        # 各プロセスを個別に終了する

        Stop-Process -Id $proc.Id -ErrorAction SilentlyContinue
    }
}
# 対象のプロセスが全て終了すれば、エラーは表示されません。

エラーハンドリングと注意事項

権限やセキュリティ上の留意点

プロセスの終了操作はシステムに大きな影響を与える可能性があるため、実行環境や権限に注意が必要です。

特に、管理者権限が必要な場合があるため、操作実行前に現在のユーザー権限を確認してください。

また、必要のないプロセスを終了するとシステムの不安定や動作停止を引き起こす可能性があるため、対象のプロセスを正確に特定することが重要です。

応答しないプロセスへの対処

終了要求に応答しないプロセスに対しては、通常の終了要求では効果が得られない場合があります。

この場合、強制終了を行うことでプロセスを終わらせることができますが、事前の確認やバックアップが必要です。

強制終了により、アプリケーションが保存前のデータを破棄する可能性があるため、十分に注意してください。

エラーメッセージの確認方法

プロセス終了時にエラーが発生する場合、Try-Catch構文を利用することでエラーメッセージを確認し、原因を特定することができます。

以下は、無効なプロセスIDに対して終了命令を実行した場合のエラーメッセージを表示する例です。

# エラー発生時にエラーメッセージを表示する例

try {

    # 存在しないプロセスIDで終了を試みる

    Stop-Process -Id 9999 -ErrorAction Stop
} catch {
    Write-Output "エラー発生: $_"
}
エラー発生: 停止対象のプロセスが見つかりませんでした。

まとめ

この記事では、PowerShellの基本操作としてプロセス一覧の確認や詳細情報の取得方法を学びました。

さらに、Stop-Processコマンドを利用したプロセスの終了方法(プロセスID指定とプロセス名指定)、ウィンドウの終了方法とプロセス終了の違いについて解説しています。

複数プロセスの一括終了や、エラーハンドリング、権限・セキュリティ上の注意点にも触れ、PowerShellでウィンドウやアプリケーションを安全に終了させる方法が理解できる内容となっています。

関連記事

Back to top button
目次へ