โหมดเซสชันเงา ช่วยให้ผู้ดูแลระบบ RDS ดูและโต้ตอบกับเดสก์ท็อปของผู้ใช้ได้ โหมด Remote Desktop Shadowing ใช้งานได้กับ Windows รุ่นใหม่ทั้งหมดตั้งแต่ Windows Server 2012 R2 และ Windows 8.1 (ยกเว้น Windows Server 2012 เนื่องจากการถ่ายโอน RDP stack จากเคอร์เนลไปยังโหมดผู้ใช้) ในบทความนี้ เราจะมาดูวิธีกำหนดค่าและใช้ RDS Shadowing เพื่อเชื่อมต่อและจัดการเซสชันผู้ใช้ RDP ที่ใช้งานอยู่ใน Windows Server 2016 และ Windows 10
สารบัญ:
- ตัวเลือกการเชื่อมต่อเงาในไคลเอนต์ Windows RDP (mstsc.exe)
- การใช้ Remote Desktop Shadow จาก GUI ของ Windows
- การกำหนดค่า RDS Shadow Rules บน Windows โดยใช้ GPO
- การแรเงาเซสชัน RDP ด้วย PowerShell
- จะอนุญาตให้ผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบเงาเซสชัน 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 – เชื่อมต่อกับเซสชัน RDP ของผู้ใช้ด้วย ID ที่ระบุ
- /v:ชื่อเซิร์ฟเวอร์ – คุณสามารถระบุชื่อโฮสต์หรือที่อยู่ IP ของโฮสต์ RDP/RDS ระยะไกลได้ หากไม่ได้ตั้งค่าไว้ จะมีการเชื่อมต่อกับเซสชันผู้ใช้ในเครื่องบนโฮสต์ปัจจุบัน
- /ควบคุม – อนุญาตให้โต้ตอบกับเซสชันผู้ใช้ (เดสก์ท็อป) ผู้ดูแลระบบสามารถควบคุมเมาส์ของผู้ใช้ ป้อนข้อมูลจากแป้นพิมพ์ หากไม่ได้ตั้งค่าพารามิเตอร์นี้ ระบบจะใช้โหมดดูเซสชันของผู้ใช้
- /noConsentPrompt – ตัวเลือกนี้อนุญาตให้ผู้ดูแลระบบบังคับการเชื่อมต่อกับเซสชันใดๆ โดยไม่ต้องขอให้ผู้ใช้ยืนยันการเชื่อมต่อ
- /พรอมต์ – อนุญาตให้เชื่อมต่อกับข้อมูลประจำตัวอื่น ๆ ขอชื่อผู้ใช้และรหัสผ่านเพื่อเชื่อมต่อกับคอมพิวเตอร์ระยะไกล
เซสชันเงาสามารถใช้เพื่อเชื่อมต่อกับเซสชันผู้ใช้บนคอมพิวเตอร์และเซิร์ฟเวอร์ทั้งในโดเมน Active Directory และเวิร์กกรุ๊ป นอกจากนี้ ไม่จำเป็นต้องมีสิทธิ์ของผู้ดูแลระบบบนโฮสต์ RDS ในเซสชัน RDP ของผู้ใช้ที่กำลังรันอยู่ ผู้ดูแลระบบสามารถมอบสิทธิ์การอนุญาต RDS Shadowing ให้กับบัญชีผู้ใช้ใด ๆ แม้แต่ผู้ที่ไม่ใช่ผู้ดูแลระบบ (เพิ่มเติมเกี่ยวกับสิ่งนี้ด้านล่าง)
การใช้ Remote Desktop Shadow จาก GUI ของ Windows
คุณสามารถเชื่อมต่อกับเซสชันผู้ใช้โดยใช้ 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?
หากผู้ใช้ยืนยันการเชื่อมต่อ ผู้ดูแลระบบจะเห็นเดสก์ท็อปใน ดู แต่จะไม่สามารถโต้ตอบกับมันได้
เคล็ดลับ หากต้องการยกเลิกการเชื่อมต่อจากเซสชันผู้ใช้และออกจากโหมด Shadow ให้กด
ALT+*
บนเวิร์กสเตชันหรือ Ctrl+*
บนเซิร์ฟเวอร์ RDS (ถ้าไม่ได้ตั้งค่าชุดค่าผสมอื่นไว้) หากผู้ใช้ปฏิเสธการเชื่อมต่อ Shadow RDS ของผู้ดูแลระบบ ข้อความต่อไปนี้จะปรากฏขึ้น:
Shadow Error: The operator or administrator has refused the request.
คุณไม่สามารถใช้สแน็ปอินกราฟิก tsadmin.msc จาก Windows Server 2008 R2 สำหรับการเชื่อมต่อเงากับเซสชัน RDP บน Windows Server เวอร์ชันใหม่กว่าได้
หากคุณพยายามเชื่อมต่อกับเซสชันของผู้ใช้โดยไม่ให้ยืนยัน คุณจะได้รับ ข้อความแสดงข้อผิดพลาด:
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 บันทึก:
- รหัสกิจกรรม 20508 :อนุญาตให้ใช้มุมมองเงา
- รหัสกิจกรรม 20503 :เริ่มเซสชัน Shadow View แล้ว
- รหัสกิจกรรม 20504 :เซสชันมุมมองเงาหยุดลง
การกำหนดค่า RDS Shadow Rules บน Windows โดยใช้ GPO
การตั้งค่าสำหรับการเชื่อมต่อระยะไกลไปยังเซสชันผู้ใช้ RDS ได้รับการกำหนดค่าโดยใช้พารามิเตอร์นโยบายกลุ่ม ตั้งกฎสำหรับการควบคุมระยะไกลของเซสชันผู้ใช้บริการเดสก์ท็อประยะไกล ซึ่งอยู่ภายใต้ส่วนผู้ใช้และคอมพิวเตอร์ของ GPO: Policies -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections นโยบายนี้สอดคล้องกับ DWORD เงา พารามิเตอร์ภายใต้คีย์รีจิสทรี HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
(ค่าของพารามิเตอร์นี้สอดคล้องกับการตั้งค่านโยบายระบุไว้ในวงเล็บ)
นโยบายนี้สามารถใช้เพื่อกำหนดค่าตัวเลือกการเชื่อมต่อ RD Shadow ต่อไปนี้:
- ไม่อนุญาตให้ใช้รีโมตคอนโทรล (สอดคล้องกับค่าของพารามิเตอร์รีจิสตรี
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
คุณสามารถกำหนดค่ากฎสำหรับการเชื่อมต่อเงาระยะไกลในโดเมน AD จาก gpmc.msc
คอนโซลโดยใช้พารามิเตอร์นโยบายที่อธิบายไว้ข้างต้น หรือโดยใช้การตั้งค่านโยบายกลุ่ม ซึ่งจะแก้ไขพารามิเตอร์รีจิสทรีโดยตรง (ตัวเลือกหลังช่วยให้คุณสามารถกำหนดเป้าหมายนโยบายไปยังคอมพิวเตอร์เครื่องใดเครื่องหนึ่งได้อย่างแม่นยำมากขึ้นโดยใช้การกำหนดเป้าหมายระดับรายการนโยบายกลุ่ม)
การแรเงาเซสชัน RDP ด้วย PowerShell
คุณยังสามารถใช้คุณลักษณะ Remote Desktop Services Shadow เพื่อเชื่อมต่อกับเซสชันของผู้ใช้จาก PowerShell ก่อนอื่น คุณต้องรับรายการเซสชันบนโฮสต์ RDS (เซสชันผู้ใช้จะถูกจัดกลุ่มตามสถานะ):Get-RDUserSession | ft Username, UnifiedSessionId, SessionState, HostServer, ApplicationType -GroupBy Sessionstate
มีสามเซสชันผู้ใช้ RDP ที่ใช้งานอยู่บนเซิร์ฟเวอร์นี้ มาเชื่อมต่อกับเซสชันผู้ใช้ด้วย ID เซสชัน 3:Mstsc /shadow:3 /control
นอกจากนี้ หากต้องการรับรายการเซสชัน RDP ทั้งหมดบนเซิร์ฟเวอร์ (หรือบนเดสก์ท็อป Windows 10 ที่อนุญาตการเชื่อมต่อ RDP หลายรายการ) คุณสามารถใช้คำสั่ง:
quser
หรือ
qwinsta
หน้าจอจะแสดงรายการเซสชันผู้ใช้ RDP, ID และสถานะ:Active
หรือ Disconnected
.
หากต้องการแสดงรายการเซสชันบนเซิร์ฟเวอร์ระยะไกล ให้เรียกใช้คำสั่งต่อไปนี้:
query session /server:servername
หากต้องการเชื่อมต่อกับเซสชันผู้ใช้บนเซิร์ฟเวอร์ระยะไกล ให้ใช้คำสั่ง:
mstsc /v:rdsh2:3389 /shadow:3 /control
เพื่อการเชื่อมต่อเงาที่สะดวกยิ่งขึ้นกับเซสชันผู้ใช้ RDP คุณสามารถใช้แบทช์สคริปต์ต่อไปนี้ จะแจ้งให้คุณป้อนชื่อเซิร์ฟเวอร์ 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_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% /control
คุณยังสามารถใช้สคริปต์ PowerShell ต่อไปนี้กับ GUI แบบง่าย (shadow_user_rdp_session.ps1 ) สำหรับการเชื่อมต่อเงา:
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 ที่ใช้งานอยู่บนโฮสต์ท้องถิ่น คุณเพียงแค่ต้องเลือกบัญชีผู้ใช้แล้วคลิกปุ่ม เชื่อมต่อ ปุ่ม.
ในการเรียกใช้สคริปต์ PowerShell (*.ps1) บนคอมพิวเตอร์ คุณต้องกำหนดค่านโยบายการดำเนินการของ PowerShellคุณสามารถใช้การเชื่อมต่อผู้ใช้เงาไม่เฉพาะบน Windows Server ที่มีบทบาทบริการเดสก์ท็อประยะไกล แต่ยังเชื่อมต่อกับเดสก์ท็อปของผู้ใช้ที่ใช้ Windows 10 ได้ (โดยใช้โหมดการซ่อนเซสชันเดสก์ท็อประยะไกลใน 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