【完全ガイド】Windows Server 2016/2019のRDSでユーザーのRDPセッションをシャドウ(リモート制御)する方法
シャドウセッションモードを使用すると、RDS管理者はユーザーのデスクトップを表示したり、直接操作したりすることができます。リモートデスクトップシャドウ機能は、Windows Server 2012 R2およびWindows 8.1以降のすべての最新バージョンのWindowsで利用可能です(RDPスタックがカーネルモードからユーザーモードへ移行したWindows Server 2012のみ例外)。本記事では、Windows Server 2016およびWindows 10環境において、RDSシャドウ機能を構成し、アクティブなRDPユーザーセッションへ接続・管理する方法を詳しく解説します。
目次
- Windows RDPクライアント(mstsc.exe)のシャドウ接続オプション
- Windows GUIからのリモートデスクトップシャドウの使い方
- GPOを使用したRDSシャドウルールの構成
- PowerShellによるRDPセッションのシャドウ
- 非管理者ユーザーにRDSセッションのシャドウを許可する方法
Windows RDPクライアント(mstsc.exe)のシャドウ接続オプション
Windows Server 2016/Windows 10の内蔵RDPクライアント(mstsc.exe)には、任意のユーザーのアクティブなRDPセッションへリモートシャドウ接続するための専用オプションが複数用意されています。
Mstsc.exe [/shadow:sessionID [/v:Servername] [/control] [/noConsentPrompt] [/prompt]]
- /shadow:ID – 指定したIDを持つユーザーのRDPセッションに接続します。
- /v:servername – リモートのRDP/RDSホストのホスト名またはIPアドレスを指定できます。未指定の場合は、現在のホスト上のローカルユーザーセッションに接続します。
- /control – ユーザーセッション(デスクトップ)との対話を可能にします。管理者はユーザーのマウスを操作したり、キーボードから入力したりできます。このパラメータを省略した場合は、表示のみのモードになります。
- /noConsentPrompt – ユーザーへの確認を省略し、任意のセッションへの接続を強制するオプションです。
- /prompt – 別の資格情報で接続する場合に使用します。リモートコンピューターへの接続時にユーザー名とパスワードの入力を求められます。
シャドウセッションは、Active Directoryドメイン環境とワークグループ環境のどちらのコンピューターやサーバー上のユーザーセッションにも接続できます。さらに、ユーザーのRDPセッションが稼働しているRDSホストの管理者権限を持っている必要はありません。管理者は、非管理者ユーザーを含む任意のユーザーアカウントに対して、RDSシャドウの権限を委任することも可能です(詳細は後述します)。
Windows GUIからのリモートデスクトップシャドウの使い方
ユーザーセッションへの接続は、mstsc.exeのコマンドラインだけでなく、サーバーマネージャーのグラフィカルコンソールからも直接行えます。手順は以下の通りです。
- RDSサーバーでサーバーマネージャーを開きます。
- 「リモートデスクトップサービス」セクションに移動します。
- 対象のコレクション(例:
QuickSessionCollection)を選択します。
右側の一覧に、このRDSサーバー上にセッションを持つユーザーが表示されます。シャドウしたいユーザーセッションを右クリックし、ドロップダウンメニューから「シャドウ」を選択してください。
なお、接続できるのはアクティブなユーザーセッションのみです。セッションが切断状態になっている場合(RDSセッションの制限時間やタイムアウト設定などによる)、そのセッションには接続できず、以下のエラーが表示されます。
Shadow Error - The specified session is not connected.
シャドウ接続のパラメータウィンドウが表示されたら、ユーザーのRDPセッションを「表示」するか「制御」するかを選択できます。また、「ユーザーの許可を求める」オプションにチェックを入れることも可能です。
このオプションにチェックを入れた場合、ユーザーのRDPセッション側に以下のような確認要求が表示されます。
Remote Monitoring Request woshub\administrator is requesting to view your session remotely. Do you accept the request?
ユーザーが接続を承認すると、管理者は「表示」モードでユーザーのデスクトップを閲覧できますが、操作することはできません。
ヒント: ユーザーセッションから切断してシャドウモードを終了するには、ワークステーションでは Alt + * を、RDSサーバーでは Ctrl + * を押します(別のキーの組み合わせが設定されていない場合)。
ユーザーが管理者によるシャドウ接続を拒否した場合は、以下のメッセージが表示されます。
Shadow Error: The operator or administrator has refused the request.
なお、Windows Server 2008 R2で使用されていた tsadmin.msc のグラフィカルスナップインを使って、新しいバージョンのWindows Server上のRDPセッションへシャドウ接続することはできませんので注意してください。
また、ユーザーの確認を求めずにセッションへ接続しようとした際に、グループポリシーでユーザーの同意が必須と設定されている場合は、以下のエラーが発生します。
Shadow Error: The Group Policy setting is configured to require the user's consent. Verify the configuration of the policy settings.
ユーザーセッションへのRDSシャドウ接続イベントを監査したい場合は、Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational ログから以下のイベントIDをフィルタリングして確認できます。
- イベントID 20508:シャドウ表示の権限が付与された
- イベントID 20503:シャドウ表示セッションが開始された
- イベントID 20504:シャドウ表示セッションが停止された
GPOを使用したRDSシャドウルールの構成
RDSユーザーセッションへのリモート接続に関する設定は、グループポリシーの「リモートデスクトップサービスユーザーセッションのリモート制御の規則を設定」パラメータで構成します。このポリシーは、GPOのユーザー構成とコンピューターの構成の両方に存在し、以下のパスにあります。
ポリシー → 管理用テンプレート → Windowsコンポーネント → リモートデスクトップサービス → リモートデスクトップセッションホスト → 接続
このポリシーは、レジストリキー HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services 配下のDWORD値 Shadow に対応しています。設定できるオプションは以下の5種類です。
- リモート制御を許可しない(レジストリ値:
Shadow = 0) - ユーザーの許可付きフルコントロール(
1) - ユーザーの許可なしフルコントロール(
2) - ユーザーの許可付きセッション表示(
3) - ユーザーの許可なしセッション表示(
4)
レジストリから直接このパラメータを設定する場合は、以下のコマンドを使用します。
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /t REG_DWORD /d 4
シャドウの動作設定を変更した後は、RDP/RDSホスト上でグループポリシー設定を更新(gpupdate)してください。
Active Directoryドメイン環境でリモートシャドウ接続のルールを構成するには、gpmc.mscコンソールから上記のポリシーパラメータを使用するか、レジストリ値を直接変更するグループポリシー設定(Group Policy Preferences)を利用します。後者の方法では、アイテムレベルのターゲット設定を使って、特定のコンピューターに対してより精密にポリシーを適用できるというメリットがあります。
PowerShellによるRDPセッションのシャドウ
PowerShellからもリモートデスクトップサービスのシャドウ機能を使って、ユーザーセッションに接続できます。まず、RDSホスト上のセッション一覧を取得しましょう(ユーザーセッションは状態ごとにグループ化されます)。
Get-RDUserSession | ft Username, UnifiedSessionId, SessionState, HostServer, ApplicationType -GroupBy Sessionstate
このサーバーには3つのアクティブなRDPユーザーセッションがあります。ここでは、セッションIDが3のユーザーセッションに接続してみます。
Mstsc /shadow:3 /control
また、サーバー上のすべてのRDPセッションの一覧を取得するには(複数のRDP接続が許可されているWindows 10デスクトップでも同様)、以下のコマンドが使えます。
quser
または
qwinsta
画面には、RDPユーザーセッションの一覧と、それぞれのID、状態(Active または Disconnected)が表示されます。
リモートサーバー上のセッション一覧を表示するには、次のコマンドを実行します。
query session /server:servername
リモートサーバー上のユーザーセッションに接続するには、以下のコマンドを使用します。
mstsc /v:rdsh2:3389 /shadow:3 /control
注意: リモートシャドウ接続セッションの確立には、デフォルトのTCP/3389(RDPポート)ではなく、動的ポート範囲(RPC)の49152〜65535が使用されます。ファイアウォール設定の際はご留意ください。
便利なバッチスクリプト(shadow.bat)
より手軽にシャドウ接続を行うために、以下のバッチスクリプトを活用できます。リモートRDSサーバー名の入力を求め、セッション一覧を表示した後、接続先のセッションIDを指定するだけで接続できます。
shadow.bat
@echo off set /P rcomp="Enter name or IP of a Remote PC: " query session /server:%rcomp% set /P rid="Enter RDP user ID: " start mstsc /shadow:%rid% /v:%rcomp% /control
このbatファイルを %Windir%\System32 ディレクトリに保存しておけば、shadow コマンドを実行するだけでシャドウ接続を開始できます。
コンソールセッション接続用スクリプト(shadow_console.bat)
コンソールセッションに接続したい場合は、以下のスクリプトを使用します。
@echo off
set /P rcomp="Enter name or IP of a Remote PC: "
for /f "tokens=3 delims= " %%G in ('query session console /server:%rcomp%') do set rid=%%G
start mstsc /shadow:%rid% /v:%rcomp% /controlGUI付きPowerShellスクリプト(shadow_user_rdp_session.ps1)
シンプルなGUIを持つ以下のPowerShellスクリプトを使えば、さらに直感的にシャドウ接続が行えます。
Add-Type -assembly System.Windows.Forms
$Header = "SESSIONNAME", "USERNAME", "ID", "STATUS"
$gForm = New-Object System.Windows.Forms.Form
$gForm.Text ='Shadow Session Connect'
$gForm.Width = 400
$gForm.AutoSize = $true
$dBttn = New-Object System.Windows.Forms.Button
$dBttn.Text = 'Control'
$dBttn.Location = New-Object System.Drawing.Point(15,10)
$gForm.Controls.Add($dBttn)
$dList = New-Object System.Windows.Forms.ListView
$dList.Location = New-Object System.Drawing.Point(0,50)
$dList.Width = $gForm.ClientRectangle.Width
$dList.Height = $gForm.ClientRectangle.Height
$dList.Anchor = "Top, Left, Right, Bottom"
$dList.MultiSelect = $False
$dList.View = 'Details'
$dList.FullRowSelect = 1;
$dList.GridLines = 1
$dList.Scrollable = 1
$gForm.Controls.add($dList)
foreach ($column in $Header){
$dList.Columns.Add($column) | Out-Null
}
$(qwinsta.exe | findstr "Active") -replace "^[\s>]" , "" -replace "\s+" , "," | ConvertFrom-Csv -Header $Header | ForEach-Object {
$dListItem = New-Object System.Windows.Forms.ListViewItem($_.SESSIONNAME)
$dListItem.Subitems.Add($_.USERNAME) | Out-Null
$dListItem.Subitems.Add($_.ID) | Out-Null
$dListItem.Subitems.Add($_.STATUS) | Out-Null
$dList.Items.Add($dListItem) | Out-Null
}
$dBttn.Add_Click(
{
$SelectedItem = $dList.SelectedItems[0]
if ($SelectedItem -eq $null){
[System.Windows.Forms.MessageBox]::Show("Select a user session to connect ")
}else{
$session_id = $SelectedItem.subitems[2].text
$(mstsc /shadow:$session_id /control)
#[System.Windows.Forms.MessageBox]::Show($session_id)
}
}
)
$gForm.ShowDialog()このスクリプトを実行すると、ローカルホスト上のアクティブなRDPセッションの一覧が表示されたシンプルなグラフィカルフォームが起動します。対象のユーザーアカウントを選択して「Connect」ボタンをクリックするだけです。
注意: コンピューター上でPowerShellスクリプト(*.ps1)を実行するには、あらかじめPowerShellの実行ポリシー(Execution Policy)を適切に設定しておく必要があります。
シャドウ接続は、リモートデスクトップサービスの役割がインストールされたWindows Serverだけでなく、Windows 10が稼働するユーザーのデスクトップに対しても使用できます。
非管理者ユーザーにRDSセッションのシャドウを許可する方法
これまでの例では、RDSユーザーセッションへのシャドウ接続には、RDSサーバー上のローカル管理者権限が必要でした。しかし、ローカル管理者権限を付与することなく、一般ユーザー(非管理者)にRDPセッションのシャドウを許可することも可能です。
例として、「AllowRDSShadow」というグループのメンバーに、RDPユーザーセッションへのシャドウ接続を許可するケースを考えてみましょう。管理者権限でコマンドプロンプト(cmd.exe)を開き、以下のコマンドを実行します。
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName="RDP-Tcp") CALL AddAccount "woshub\AllowRDSShadow",2
このコマンドにより、指定したグループのメンバーは、サーバーのローカル管理者権限を持っていなくても、RDPセッションのシャドウ接続を利用できるようになります。ヘルプデスク担当者などがユーザーをサポートする際に、過剰な権限を与えずに運用できる便利な手法です。
-
【Windows Server 2016/2019】リモートデスクトップライセンスサーバーにRDS CALをインストールする方法
リモートデスクトップライセンスサーバーのインストールとアクティブ化がすでに完了している場合、次に行うのはリモートデスクトップサービスのクライアントアクセスライセンス(RDS CAL)をライセンスサーバーにインストールする作業です。この記事では、その具体的な手順をわかりやすく解説します。 Windows Server 2019 または Windows Server 2016 のRDSサーバーにRDS CALを新規インストール、あるいは追加する方法は以下の通りです。 RDS CALのインストール手順 1. リモートデスクトップライセンスマネージャーを開く サーバーマネージャーを開き、ツールメニュー
-
Windows 11でユーザーアカウント制御(UAC)を無効にする3つの方法
Windows 11では、ユーザーアカウント制御(UAC)をさまざまな方法でオフにすることができます。UACとは、各種アプリがPCに対して変更を加えようとした際に、ユーザーの承認を求めるセキュリティ機能のことです。Windows 11ではデフォルトでUACのダイアログが表示されるようになっており、アプリが管理者権限で起動しようとすると、許可を求める画面が出てきます。この機能を不要だと感じる方も少なくありません。本記事では、Windows 11のユーザーアカウント制御を無効にする方法を詳しく解説します。 なぜ多くの人はUACを重要視しないのか? 多くの人が「はい」を押しているだけ レジストリエ