Linux で一般的な rdesktop など、RDP 互換ソフトウェアの場合、ソフトウェアのバージョンはわかっても、対応する RDP のバージョンはよくわかりません。そんなときは RDP セッションの接続を受けた側で確認することができます。 コマンドラインから確認できないものか悩んでいたのですが、PowerShell を使った方法を見つけました。
リモート デスクトップ サービスやターミナル サービスのコンポーネントがインストールされているサーバーや、RSAT for Windows 7 が利用可能であれば、「リモート デスクトップ サービス マネージャー」(%Windir%\system32\tsadmin.msc) を使用して、RDP-Tcp セッションの状態を参照することで、接続元の情報を参照できます。「クライアント ビルド番号」を見れば、RDP のバージョンがわかります。
RDP Ver ビルド番号 (OS の例)
RDP 5.1 2600 (Windows XP SP2)
RDP 5.2 3790 (Windows Server 2003 SP1/sp2)
RDP 6.0 6000 (Windows Vista RTM、Windows XP+RDP 6.0)
RDP 6.1 6001 (Windows Vista SP1、Windows XP+RDP 6.1)
RDP 7.0 7600 (Windows 7、Windows Vista SP1+RDP 7.0、Windows XP+RDP 7.0)
RDP 7.1 7601 (Windows 7 SP1)
「リモート デスクトップ サービス マネージャー」で参照できるクライアント情報を、WMI から取得できないか調べてみましたが、どうやらできないようです。リモート デスクトップ サービスのコマンドライン ツールとして QUERY SESSION や QUERY USER コマンドもありますが、ぼんやりとした情報しか提供してくれません。クライアントのビルド番号を含むクライアントの情報を取得するためには、WTSQuerySessionInformation というプログラミング用の API を利用するしかないようです。つまり、プログラミングなしで、コマンドラインやスクリプトからクライアント情報を取得するというのはできそうにないということです。私はプログラマーではないので、ちょっとしたことのために、そこまで手を出したくはありません。面倒です。
と思っていたところ、マイクロソフトの CodePlex に次の PowerShell モジュールを発見しました。
Terminal Services PowerShell Module
http://psterminalservices.codeplex.com/
https://archive.codeplex.com/?p=psterminalservices
または https://github.com/imseandavis/PSTerminalServices
または https://www.powershellgallery.com/packages/PSTerminalServices/1.0
このモジュールをインストールして、PowerShell 環境にインポートすれば、目的を達成できます。例えば、クライアントのビルド番号は次のコマンドラインで取得できます。
PS> Import-Module PSTerminalServices
PS> $mysession = Get-TSCurrentSession
PS> $mysession.ClientBuildNumber
(その他のプロパティについては Get-TSCurrentSession | Get-Member で確認できます)
右のスクリーンショットは、Ubuntu 11.04 からの RDP セッションを調べたものです。ビルド番号が 2600 なので、RDP 5.1 相当だとわかります。なお、私の環境では Import-Module PSTerminalServices でエラーが出ましたが、無視しても使えています。
2015/03/05 追記)
freerdp (RDP 7.1 RemoteFX vGPU 対応) のビルド番号は 2600、Remote Desktop client for Mac 2.1.1 は 0、Remote Desktop for Android 8.0.x/8.1.x は 0、Remote Desktop for Mac 8.0.13 は 25377 (アプリのビルド番号) だったので、Windows 以外はクライアント ビルド番号から調べるこの方法は NG でした。
Android/iOS/Mac 向けの Microsoft Remote Desktop アプリはクライアント ビルド番号が 0 なので、この方法では識別できませんでした。
返信削除