RDP ユーザーが複数いるサーバーや、同じアプリを複数人が起動している端末では、tasklist をそのまま実行しただけでは「どのセッションのプロセスか」が分かりにくくなります。tasklistをセッション単位で絞る最短手順は、/fi フィルターで SESSION または SESSIONNAME を指定することです。たとえば tasklist /fi "SESSION eq 3"、または tasklist /fi "SESSIONNAME eq console" です。 (Microsoft Learn)
設定画面はありません。tasklist は実行時にフィルターを渡して一覧表示するコマンドなので、まず tasklist や query session で Session ID / Session Name を確認し、必要なら IMAGENAME や USERNAME を重ねて絞ります。tasklist 自体は一覧表示だけなので、戻したいときは /fi を外して再実行するだけです。 (Microsoft Learn)
tasklistをセッション単位で絞る基本
tasklist では /fi でフィルターを指定でき、複数の /fi を並べることもできます。さらに /fo で出力形式を table list csv から選べて、/nh でヘッダー非表示にもできます。セッションで絞ったあとに、プロセス名やユーザー名でもう一段狭めるのが実務では扱いやすい形です。 (Microsoft Learn)
| やりたいこと | コマンド例 |
|---|---|
| Session ID で絞る | tasklist /fi "SESSION eq 3" |
| Session Name で絞る | tasklist /fi "SESSIONNAME eq console" |
| セッション内の特定アプリだけ見る | tasklist /fi "SESSION eq 3" /fi "IMAGENAME eq chrome.exe" |
| セッションとユーザーでさらに絞る | tasklist /fi "SESSION eq 3" /fi "USERNAME eq corp\user1" |
| スクリプト向けに出力する | tasklist /fi "SESSION eq 3" /fo csv /nh |
迷いにくい進め方は、まず数値の SESSION で絞り、結果が多ければ IMAGENAME や USERNAME を足すことです。Session Name は見やすい反面、後続の終了操作まで含めると Session ID ベースの方が流れをそろえやすくなります。 (Microsoft Learn)
SESSIONとSESSIONNAMEの違い
公式仕様を整理すると、SESSION と SESSIONNAME の違いは次の通りです。SESSION は数値比較ができ、SESSIONNAME は名前一致で使うフィルターです。 (Microsoft Learn)
| 項目 | SESSION | SESSIONNAME |
|---|---|---|
| 指定する値 | Session ID の数値 | Session Name の文字列 |
| 例 | SESSION eq 3 | SESSIONNAME eq console |
| 使える演算子 | eq ne gt lt ge le | eq ne |
| 向いている場面 | 正確に数値で絞る、あとで taskkill につなげる | 手元で見ながら確認する |
後続で taskkill まで使う可能性があるなら、最初から SESSION を軸にするのが安全です。taskkill の公式フィルター一覧には SESSION はありますが、SESSIONNAME はありません。つまり、一覧取得は名前でできても、終了操作まで進むときは結局 Session ID が必要になります。 (Microsoft Learn)
先にSession IDとSession Nameを確認する
tasklistでざっくり確認する
tasklist の既定出力には Session Name と Session# が含まれます。まず一度フィルターなしで実行すると、どの値を使えばよいか確認しやすくなります。 (Microsoft Learn)
tasklist
Image Name、PID、Session Name、Session#、Mem Usage が並ぶので、目的のプロセスがどのセッションにいるかを確認してから絞り込みに進むのが手堅いやり方です。 (Microsoft Learn)
複数ユーザー環境ならquery session / query userが分かりやすい
RDP や複数ユーザー環境では、query session と query user の方がセッション確認に向いています。query session は Session Name、ユーザー名、ID、状態を表示し、現在のセッションの先頭には > が付きます。query user はユーザー名、Session Name、Session ID、状態、アイドル時間、ログオン時刻まで確認できます。 (Microsoft Learn)
query session
query user
権限不足だと他ユーザーのセッションを確認できないことがあります。自分の現在セッションは確認できても、ほかのセッションの問い合わせには特別なアクセス許可やフル コントロール権限が必要になる点は見落としやすいポイントです。 (Microsoft Learn)
実務で使いやすい絞り込み例
特定のSession IDだけ見たい
数字が分かっているなら、これが最短です。
tasklist /fi "SESSION eq 3"
Session ID を直接指定するので、複数の RDP セッションがある環境でも誤解が少なく、後続で taskkill に進むときもそのまま流用しやすくなります。 (Microsoft Learn)
Session Nameで見たい
まずは読みやすい名前で確認したい、という場面では SESSIONNAME が便利です。query session に表示された名前をそのまま使うのが基本です。 (Microsoft Learn)
tasklist /fi "SESSIONNAME eq console"
tasklist /fi "SESSIONNAME eq rdp-tcp#1"
Session Name は手で確認しやすい反面、あとで終了操作に移るときは Session ID に置き換えた方が安全です。確認用は SESSIONNAME、実処理は SESSION と使い分けると混乱しにくくなります。 (Microsoft Learn)
セッション内の特定アプリだけ見たい
セッションだけで絞ると結果が多すぎることがあります。その場合は /fi を追加します。tasklist は複数フィルターに対応しています。 (Microsoft Learn)
tasklist /fi "SESSION eq 3" /fi "IMAGENAME eq chrome.exe"
tasklist /fi "SESSION eq 3" /fi "USERNAME eq corp\user1" /fi "IMAGENAME eq excel.exe"
「同じ chrome.exe が複数セッションにある」「同じユーザーが複数アプリを開いている」といった場面では、SESSION と IMAGENAME、必要に応じて USERNAME を組み合わせると、一覧が実用レベルまで一気に絞れます。 (Microsoft Learn)
出力をスクリプト向けにしたい
あとで貼り付けたり、別の処理に回したりするなら、表形式より CSV の方が扱いやすいです。 (Microsoft Learn)
tasklist /fi "SESSION eq 3" /fo csv /nh
/fo csv は CSV 形式、/nh はヘッダー非表示です。手で確認するだけなら既定の table で十分ですが、ログに残すなら CSV の方が再利用しやすくなります。 (Microsoft Learn)
失敗しやすいポイント
つまずきやすい箇所は、ほぼ次の表に集約されます。 (Microsoft Learn)
| つまずき | 原因 | 対処 |
|---|---|---|
SESSIONNAME eq 3 のように書いてしまう | 数字と名前を混同している | 数字は SESSION、文字列は SESSIONNAME を使う |
| 結果が多すぎる | セッションだけで絞っている | IMAGENAME や USERNAME を追加する |
| ほかのユーザーのセッションが見えない | 権限不足 | query session / query user の権限を確認する |
| 一覧確認のつもりが終了操作までしてしまう | tasklist と taskkill を混同している | まず tasklist で確認し、必要なら PID を控えて別コマンドで処理する |
| Session Name で確認したのに kill で詰まる | taskkill は SESSIONNAME を持たない | 一度 Session ID に読み替えてから taskkill に進む |
特に危ないのは、一覧取得と終了操作を同じ感覚で扱うことです。tasklist は表示だけですが、taskkill はプロセスを終了します。しかもリモート プロセスの終了は常に強制実行になるため、確認を省略すると影響範囲が大きくなります。 (Microsoft Learn)
戻し方と安全な次の一手
tasklist 自体に「戻す」操作はありません。そもそも設定変更ではなく、その場で一覧を表示しているだけだからです。絞り込みを解除したいなら、/fi を付けずにもう一度 tasklist を実行すれば終わりです。 (Microsoft Learn)
taskkillにつなげるならPID確認を挟む
実際にプロセスを閉じたいときは、いきなりセッション単位で taskkill するより、まず tasklist で対象を確認して PID を拾う方が安全です。 taskkill は PID 指定にも対応しています。 (Microsoft Learn)
query session
tasklist /fi "SESSION eq 3" /fi "IMAGENAME eq notepad.exe"
taskkill /pid 1234
どうしても「セッション 3 の notepad を全部閉じる」のような意図でまとめて処理したいなら、次のように SESSION フィルターを使えます。ただし対象が複数あるとまとめて終了されるので、運用中のサーバーでは PID 指定の方が無難です。 (Microsoft Learn)
taskkill /fi "SESSION eq 3" /im notepad.exe
tasklistで足りないときはPowerShellが楽
一覧をさらに加工したいなら、PowerShell の Get-Process の方が扱いやすい場面があります。既定表示には SI 列があり、これはセッション ID です。さらに Process オブジェクトには SessionId プロパティがあるため、Where-Object で素直に絞れます。 (Microsoft Learn)
Get-Process |
Where-Object SessionId -eq 3 |
Select-Object Id, ProcessName, SessionId
Get-Process chrome |
Where-Object SessionId -eq 3 |
Select-Object Id, ProcessName, SessionId
tasklist は「まず今すぐ見る」には速く、PowerShell は「そのあと加工する」には強い、という使い分けにすると無理がありません。ワンライナーで確認したいなら tasklist、自動化や集計まで見据えるなら Get-Process が向いています。 (Microsoft Learn)
迷ったときの最短手順
query sessionかquery userで Session ID / Session Name を確認する。tasklist /fi "SESSION eq <ID>"でセッション単位に絞る。- 結果が多ければ
IMAGENAMEやUSERNAMEを追加する。 - 実際に停止が必要なら、まず PID を確認して
taskkill /pidを使う。 (Microsoft Learn)
tasklistをセッション単位で絞るコツは、設定場所を探すことではなく、Session ID / Session Name を先に確定し、/fi を段階的に重ねることです。まずは query session を実行し、目的の Session ID で tasklist /fi "SESSION eq <ID>" から始めてください。そこまでできれば、確認にも切り分けにも、必要なら安全な終了操作にもつなげやすくなります。 (Microsoft Learn)

コメント