2011/06/27

水無月2.リモートデスクトップ接続のセッション確認2

前回、query sessionコマンドを利用した別サーバのセッション確認の記事を書きましたが、
山市さんのえぬなんとかわーるどで、PowerShellによるセッション確認についての記事がありました

リモート デスクトップ セッションの RDP バージョンを調べる方法 by PowerShell
http://yamanxworld.blogspot.com/2011/06/rdp-by-powershell.html

以下にあるモジュールをダウンロードし、モジュールを読み込むことで、
リモートデスクトップセッション確認、さらには接続ユーザーへメッセージを送ったりプロセスを停止させるコマンドレットを使うことができるようになります。

Terminal Services PowerShell Module 
http://psterminalservices.codeplex.com/

query sessionではせいぜいユーザー名や状態の出力くらいですが、
上記のモジュールを読みこむことで使用可能となる、Get-TSSessionはLoginした時間や接続したクライアントなど多岐にわたる情報が出力されます。

さらに、PowerShellであるため色々な応用が可能となります。
一定時間接続したユーザーに対してメッセージやログオフ処理を走らせたり、特定の端末が接続した場合のみ特殊な処理を実行させる、、ということもできそうです。
セッションの情報はRemoteAppで接続した場合でもきちんと出力されましたし、色々趣向をこらせそうですね。

では実際にやってみます。まず、モジュールを読み込み。




僕の環境では1度読み込んだらエラーが出るのですが、構わず2回読み込むと、うまくモジュール読んでくれました。

モジュールから追加されたコマンドレットをみてみます。
ついでにセッション確認のコマンドレットのヘルプもみてみます。

Get-TSSessionは、コンピュータの指定はもとより、状態やユーザーIDのフィルタなどもしてくれるみたい。

busoserverのセッション状態をみたところ。buso-pcからアクセスしているのがみてとれます。
Activeだけのものを出力できるので、それをリストとして出力させてみます。

ユーザーアカウントや、ログインした時刻、最後にinputした時刻なんかも出力されます。
query sessionとは比べ物にならない情報量ですねw

たとえば、ログインして1時間以上たってもまだアクティブなユーザーとクライアントを出したい場合には、以下のようにうてば出力できます。

Get-TSSession -ComputerName busoserver -State Active
| ?{ $($_.logintime).addhours(1) -le $(get-date) } | Select-Object clientname, l
ogintime, UserAccount

では、Send-TSMessageを組み合わせてみましょう。

busoserverでの出力。

ログインしすぎと言われたので、今回はこのへんで。


スポンサーリンク

スポンサーリンク