PowerShellで『PSTerminalServices』を使ってリモートデスクトップの接続クライアントのIPアドレスを調べる

Windowsにリモートデスクトップで繋げる際、セッション数などの問題から、現在サーバに接続しているユーザーとその接続元IPアドレス、ホスト名などを知りたい時がある。 UNIXの場合だと、whoコマンド、lastコマンドで接続元IPアドレスとそのユーザーが取得できるのだが、WindowsのDOSコマンドで使える「query session」だと、接続しているユーザーまではわかるが、接続元IPアドレスまでは取得することが出来ない。いちいち接続しているユーザーを元にイベントログから推測して調べるのも効率的ではない。

そんなときは、今回紹介する『PSTerminalServices』モジュールをインストールすると良いだろう。 このモジュールに用意されている「Get-TSSession」コマンドを利用することで、接続しているユーザ名と接続元IPアドレスを取得できる。

今回は、Windows 7 Professionalにこのモジュールをインストール、検証することにする。

1.インストール

まずは、『PSTerminalServices』モジュールのインストールを行う。 こちらからmsiファイルをダウンロードし、インストーラーを起動させる。

無事インストールかどうかを確認するため、PowerShellで以下のコマンドを実行する。

Get-Module -Name PSTerminalServices -ListAvailable
Import-Module PSTerminalServices
Get-Command -Module PSTerminalServices

実行した結果がこちら。

PS C:\Users\Work> Get-Module -Name PSTerminalServices -ListAvailable

ModuleType Name                      ExportedCommands
---------- ----                      ----------------
Manifest   PSTerminalServices        {}

PS C:\Users\Work> Import-Module PSTerminalServices
PS C:\Users\Work> Get-Command -Module PSTerminalServices

CommandType     Name                   Definition
-----------     ----                   ----------
Function        Disconnect-TSSession   ...
Function        Get-TSCurrentSession   ...
Function        Get-TSProcess          ...
Function        Get-TSServers          ...
Function        Get-TSSession          ...
Function        Send-TSMessage         ...
Function        Stop-TSProcess         ...
Function        Stop-TSSession         ...

無事、インストールできたことが確認出来た。

2.「Get-TSSession」コマンドの実行

さて、それでは実際に「Get-TSSession」コマンドを実行してみよう。

Get-TSSession

実際にコマンドを実行した結果がこちら。

PS C:\Users\Work> Get-TSSession

Server          SessionID State           IPAddress       ClientName      WindowStationName UserName
------          --------- -----           ---------       ----------      ----------------- --------
localhost       0         Disconnected                                    Services
localhost       1         Connected                                       Console
localhost       2         Active          192.168.X.XXX   XXXXXXXXXXX     RDP-Tcp#0         Work-PC\Work
localhost       65536     Listening                                       RDP-Tcp

無事、接続元IPアドレスが取得できた。 PowerShellならPSexecから接続して利用できるので、これならば良いだろう。

(本当は、whoコマンド相当のものを入れてくれればいいんだけど…まぁいいか…)