背景
下記のようなスタイルで開発を進めています。
- 昨今の事情により、プロジェクトメンバーは基本テレワークで開発
- クラウドのWindowsに複数人でログインして作業
- 最後の人がWindowsシャットダウン
やりたい事
今までは、オフィスで開発していたので、声かけあって最後の人がシャットダウンしてたけど、テレワークになってわざわざチャット確認するのも手間まなのと、すぐに確認取れないこともあるので、「だれがログインして利用しているのか」をコマンドで確認する方法を紹介します。
やり方
コマンドプロンプトを開いて"query session"と打つだけ。
結論からいうと、自分のrdp-tcp のセッションだけがActiveの状態であれば、他の人はログインしていないので、個人的にはシャットダウンしてOKとしています。
Administrator, user01 がログインして利用中の際の実行例
rdp-tcp セッションにユーザが表示され、状態がActiveになっています。
C:\Users\user01.EC2AMAZ-CQCAJLU>query session
セッション名 ユーザー名 ID 状態 種類 デバイス
services 0 Disc
console 1 Conn
>rdp-tcp#17 user01 4 Active
rdp-tcp#14 Administrator 5 Active
rdp-tcp 65536 Listen
user01がログインして利用中で、AdministratorがログオフせずにRDPの画面を閉じた状態の実行例
Administrator の状態がDiscになっています。
C:\Users\user01.EC2AMAZ-CQCAJLU>query session
セッション名 ユーザー名 ID 状態 種類 デバイス
services 0 Disc
console 1 Conn
>rdp-tcp#17 user01 4 Active
Administrator 5 Disc
rdp-tcp 65536 Listen
正直、Discの状態だと、作業中だけどRDPの画面を切っただけなのか、本当に作業が終わったのか分からないのです。
その場合は、ユーザを利用している人に確認してあげるのが一番親切ですが、、
他人のセッションにログインする
ログインしたいセッションのユーザのパスワードがわからないとできませんが、こんな方法もあります。
query session で確認できるセッションのIDに対して tsconを実行します。
C:\Users\user01.EC2AMAZ-CQCAJLU>tscon 5 /password:パスワード
・・・そこまですることはないと思いますが、こういった方法もあります。
ちなみに、Activeの状態であってもtsconでセッション奪うことが可能です。
最後に自動化
Acitveのrdp-tcpセッションがなかったらシャットダウンするバッチかパワーシェルつくって、20時以降15分おきにループ実行されるように仕込んだら楽だなーと思いつつ、そこまでは作ってないです。