tasklistをセッション単位で絞る方法|SESSIONとSESSIONNAMEの使い分け・確認手順・注意点

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)

項目SESSIONSESSIONNAME
指定する値Session ID の数値Session Name の文字列
例SESSION eq 3SESSIONNAME eq console
使える演算子eq ne gt lt ge leeq 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)

迷ったときの最短手順

  1. query session か query user で Session ID / Session Name を確認する。
  2. tasklist /fi "SESSION eq <ID>" でセッション単位に絞る。
  3. 結果が多ければ IMAGENAME や USERNAME を追加する。
  4. 実際に停止が必要なら、まず PID を確認して taskkill /pid を使う。 (Microsoft Learn)

tasklistをセッション単位で絞るコツは、設定場所を探すことではなく、Session ID / Session Name を先に確定し、/fi を段階的に重ねることです。まずは query session を実行し、目的の Session ID で tasklist /fi "SESSION eq <ID>" から始めてください。そこまでできれば、確認にも切り分けにも、必要なら安全な終了操作にもつなげやすくなります。 (Microsoft Learn)

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次