コマンドラインからセッションIDを取得するには?
windowsのコマンドラインから現在のユーザーのセッションIDを取得する方法を教えてください。
ユーザータブのタスクリストでは、各ユーザーにセッションIDが関連付けられています。リモートアプリケーションで使用できるように、コマンドラインからこれを取得したいのですが、どうすればいいですか?
windowsのコマンドラインから現在のユーザーのセッションIDを取得する方法を教えてください。
ユーザータブのタスクリストでは、各ユーザーにセッションIDが関連付けられています。リモートアプリケーションで使用できるように、コマンドラインからこれを取得したいのですが、どうすればいいですか?
これは確かに最も効率的な方法ではありませんが、tasklist
の結果を見てみましょう。実行中の各プロセスの名前とセッション番号が表示されます。ローカルでログインしている場合は、"console “という名前のセッションのIDを見てください。
d:\>tasklist
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 24 K
System 4 Services 0 8,580 K
smss.exe 316 Services 0 1,500 K
...snip
Edit:
Query Session
はセッション ID:
d:\>query session
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
``` を取得します。
これは、 Garyさんの回答 と Oscarさんの回答 の側面を組み合わせたものです。 ) おそらく質問の意図は、現在アクティブなセッションのIDを調べることだと思われます。 query session
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console janedoe 1 Active
rdp-tcp 65536 Listen
これは、query session
の出力の各行からそれぞれquery session
、%a
、%b
、%c
、Active
に2番目、3番目、4番目のワード(USERNAME、[SESSION] ID、STATEであることを期待しています)を代入し、USERNAMEが私でSTATEがquery session
の行からSESSION IDを報告しています。
username
は %%a
パラメータを取ることが判明したので、上記は
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>console gman 1 Active
otherguy 2 Disc
または
for /f "tokens=2-4" %a in ('query session') do @if "%a"=="%username%" if "%c"=="Active" echo %b
これをスクリプト(バッチファイル)で使うには、スクリプト内なので %%b
と %a
を使って(%b
と @
の代わりに)
for /f "tokens=2-4" %a in ('query session %username%') do @if "%c"=="Active" echo %b
と言った方がいいかもしれません。 バッチファイル全体が@echo off
以下であれば、おそらくunknown
を省くことができるでしょう。query session
への初期化により、エラー処理(query session
の出力にマッチする行がないかどうかの検出)を行うことができます。
セッション名と違って、セッションIDは変数に格納されていないので、簡単に手に入るものではありません。あるとは思いますが、これを実行するコマンドラインツールが内蔵されているとは思えません。
しかし、これを行う小さな .exe ファイル (C#, .Net 4) を書きました。
これはセッションIDを表示するだけでなく、リターンコードとしても使用することができるので、様々なスクリプトやテクニックでこれを使用することができます。 MediaFire上のファイルへのリンク
これは、Oscar Behさんのコードを元にしています。
tasklist
は、指定された実行ファイルのすべてのインスタンスのセッション ID (およびその他の情報) をレポートします。コマンドを実行していると、セッションIDが表示されます。彼のコードの唯一の潜在的な欠陥は、プログラムのインスタンスが複数ある場合に通知されないことで、スクリプトが誤った結果を返す原因となります。
ここでは、そのコマンドを実行している別のセッションがないことを確認するために、tasklist
のすべてのインスタンスを報告しています。
for /f "tokens=4 delims= " %%G in ('tasklist /FI "IMAGENAME eq tasklist.exe" /NH') do echo Session ID %%G
2つのセッションIDが報告されている場合は、スクリプトを再度実行してください。