启用 Windows 11 上的远程桌面通过 PowerShell 操作非常灵活,可以从注册表配置、启用防火墙规则,到启动远程桌面服务及相关功能等进行全面管理。按照上面的分类表格,可以轻松完成远程桌面的启用与配置工作,包括远程桌面功能本身、网络安全性设置、服务重启和端口检测等步骤。

在 Windows 11 中,MSTSC(Microsoft Terminal Services Client,远程桌面客户端)的功能是通过调用不同的 API 来实现远程桌面连接、管理会话以及控制远程主机的桌面等功能。通过这些 API,用户可以通过命令行、脚本等方式启动远程桌面连接,管理 RDP 会话,以及执行各种远程操作。

下面是关于 MSTSC 中常用的 API 功能的分类和表格化的总结。该表格将 API 按照其功能进行分组,帮助更好地理解每个 API 的作用。

1. 远程桌面连接和会话管理

API 功能 API 名称 描述
启动远程桌面会话 Mstsc (mstsc.exe) 启动远程桌面客户端应用程序,并通过命令行参数指定要连接的主机和会话选项。
管理 RDP 会话 Rdpinit 初始化和管理 RDP 会话,指定连接参数。
获取会话状态 WtsQuerySessionInformation 获取指定会话的相关信息,如会话 ID、会话状态、用户名等。
切换会话 WtsSwitchDesktop 切换当前的桌面会话到指定的会话。
获取所有活动会话 WtsEnumerateSessions 获取当前远程桌面服务器上的所有活动会话信息。

2. 远程桌面连接配置

API 功能 API 名称 描述
配置远程桌面连接选项 Mstsc / Mstsc /v:<hostname> 配置远程桌面连接参数,如指定要连接的远程主机地址。
启用或禁用 RDP 端口 RegSetValueEx 通过修改注册表来启用或禁用远程桌面服务端口(通常是 TCP 端口 3389)。
配置 RDP 安全性选项 WtsSetOption 配置 RDP 连接的安全性选项,如加密、认证方式等。
配置远程桌面分辨率 RdpSetResolution 设置远程桌面会话的分辨率、颜色深度等显示选项。
配置 RDP 音频重定向 WtsApi32.dll / WtsSetAudio 配置远程桌面连接中的音频重定向选项,如音频流式传输。

3. 远程桌面会话控制和监控

API 功能 API 名称 描述
断开远程桌面连接 WtsDisconnectSession 断开指定的远程桌面会话,使该会话进入断开状态。
重新连接会话 WtsReconnectSession 重新连接断开状态的会话。
控制会话输入/输出 RdpSetInput 控制远程桌面会话中的输入/输出设备,如键盘、鼠标的映射与控制。
显示会话信息 WtsQuerySessionInformation 查询并显示当前会话的详细信息,如会话的状态、用户信息等。
监控远程桌面会话 WtsMonitorSession 监控远程桌面会话的活动,如是否处于活动状态或用户是否正在使用会话。

4. 远程桌面安全性和认证

API 功能 API 名称 描述
远程桌面认证 WtsLogin 进行远程桌面会话的身份验证,检查用户凭据是否合法。
配置身份验证方式 WtsSetSecurity 设置远程桌面连接的安全性选项,包括加密等级和认证方式。
配置 RDP 证书 CertEnroll 用于配置和管理 RDP 连接的 SSL/TLS 证书,保障连接的安全性。
验证客户端证书 WtsVerifyClientCertificate 验证客户端证书是否合法,用于增强远程桌面连接的安全性。
配置 NLA(网络级身份验证) WtsEnableNla 启用或禁用网络级身份验证(NLA)功能,提升远程桌面连接的安全性。

5. 远程桌面打印和重定向

API 功能 API 名称 描述
启用打印重定向 WtsEnablePrinterRedirection 启用或禁用远程桌面会话中的打印机重定向功能。
启用文件重定向 WtsEnableDriveRedirection 启用或禁用文件驱动器的重定向功能,使用户能够在远程桌面会话中访问本地文件系统。
配置打印机共享 WtsSetPrinter 配置远程桌面会话中的共享打印机设置,允许打印作业从远程会话发送到本地打印机。
配置设备重定向 WtsSetDeviceRedirection 启用或禁用远程桌面中的设备重定向,例如 USB 设备或其他外部硬件。

6. 远程桌面性能优化和调试

API 功能 API 名称 描述
启用/禁用动态桌面优化 RdpSetDynamicResolution 根据网络条件自动调整远程桌面的分辨率,优化远程桌面会话的性能。
配置带宽限制 WtsSetBandwidthLimit 配置 RDP 会话的带宽限制,确保网络资源的高效使用。
启用/禁用延迟优化 RdpEnableLatencyOptimization 启用或禁用 RDP 会话中的延迟优化功能,以改善高延迟网络环境下的体验。
远程桌面调试和日志 WtsLogSessionActivity 启用远程桌面会话的调试日志记录功能,帮助排查连接或性能问题。

 

Windows 11 中的 MSTSC 通过各种 API 提供了远程桌面连接、管理、优化、安全性和会话控制等多个方面的功能。这些 API 使得用户可以灵活地配置和管理远程桌面会话,并实现诸如认证、安全性控制、会话监控等高级功能。

不同的应用场景可能需要使用不同的 API,例如,管理 RDP 会话时常用的 API 包括 WtsQuerySessionInformationWtsSwitchDesktop,而配置连接参数时可能会涉及 MstscRdpSetResolution 等 API。


在 Windows 环境中,启用 SHADOW 功能主要用于远程监视或控制其他 RDP(远程桌面协议)会话。要启用 SHADOW 功能,通常需要使用命令行工具或在系统设置中进行配置。下面是启用 SHADOW 功能的步骤和方法。

1. 启用远程桌面和 SHADOW 功能

确保远程桌面已启用

首先,确保目标计算机已启用远程桌面。你可以通过以下步骤来启用远程桌面:

  1. 打开“控制面板” → “系统和安全” → “系统”
  2. 点击左侧的 “远程设置”,进入 “远程” 标签页。
  3. 在 “远程桌面” 部分,选择 “允许远程连接到此计算机”
  4. 确保在 “高级” 设置中,启用了 “网络级身份验证”(更安全)。

使用命令启用 SHADOW 功能

启用 SHADOW 功能,管理员可以使用 shadow 命令来连接并控制其他用户的会话。下面是相关的步骤和命令。

2. 使用 shadow 命令

在 Windows 中,shadow 命令用于连接并监控其他 RDP 会话。该命令一般用于管理员(具有管理员权限的用户)来远程查看或控制其他用户的桌面会话。

查看当前的 RDP 会话

在命令提示符(cmd)或 PowerShell 中,首先可以使用 query 命令来列出当前系统中所有活动的 RDP 会话,获取目标会话的 Session ID

命令:

bashCopy Code
query user

该命令将显示当前用户的会话 ID、用户名和状态。例如:

Copy Code
C:\> query user
 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
 user1                rdp-tcp#1          1  Active  none        12/31/2024 08:00 AM
 user2                rdp-tcp#2          2  Active  none        12/31/2024 08:05 AM

在这个例子中,user1user2 是当前登录的用户,Session ID 分别是 1 和 2。

启动 shadow 命令连接会话

获取目标会话的 Session ID 后,可以使用 shadow 命令来监视或控制该会话。假设你想监控或控制会话 ID 为 2 的用户 user2,则可以使用以下命令:

bashCopy Code
shadow 2

如果你希望监控会话而不进行干预(只查看),可以使用带有 /console/v 的选项来启用只查看模式。

控制目标会话

如果希望直接控制目标会话(例如,帮助用户处理问题),可以在连接后进行相应的交互。具体操作与本地使用计算机时相同。

注意事项

  • 你需要使用管理员权限运行 cmd 或 PowerShell,才能成功执行 shadow 命令。
  • 目标用户会话通常会收到警告,提示他们会话正在被监视或控制。
  • 在某些 Windows 版本中,shadow 命令可能未默认启用。确保远程桌面会话配置正确,并且管理员已启用必要的功能。

3. 设置会话权限

如果你希望启用 SHADOW 功能进行监视或控制,确保相关的安全设置和权限已配置:

  1. 组策略设置:确保目标计算机允许管理员连接和控制其他用户会话。你可以通过 gpedit.msc 进行相关设置。

    • 打开 组策略编辑器 (gpedit.msc)。
    • 导航至 计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 会话配置
    • 启用 “允许管理员连接” 设置。
  2. 安全性和权限管理:确保你作为管理员有足够权限执行远程会话控制。你可能需要在管理员组或 RDP 用户组中配置相关权限。

4. 其他注意事项

  • 目标用户的同意:在默认情况下,Windows 系统会提示目标用户,当管理员开始远程监视或控制他们的会话时,用户会看到警告信息。
  • 日志记录:执行 shadow 命令时,通常会有日志记录,管理员可以查看这些日志以确认会话活动。

通过上述方法,你可以在 Windows 环境中启用并使用 SHADOW 功能来监视或控制远程桌面会话。

 

在 Windows 操作系统中,console 选项与 RDP(远程桌面协议)会话的优先级以及如何连接到特定会话有关,尤其是当计算机上有多个远程桌面会话时。下面将详细解释有关 会话优先级控制台会话 的概念。

1. 控制台会话(Console Session)

控制台会话是指直接连接到物理计算机的用户界面,也就是物理登录的本地会话。通常,在 Windows 中,控制台会话的 ID 为 0。当你使用 shadow/console 参数连接到计算机时,你实际上是在连接到这一个会话。

控制台会话的特点:

  • 物理显示器和输入设备:控制台会话通常与物理显示器(显示器、键盘和鼠标)直接连接的会话相对应。
  • 初始会话:控制台会话通常是计算机启动时最早建立的会话。即使你有多个远程会话或本地会话,它仍然是系统的 主会话,通常用于系统管理和配置。
  • 会话 ID 为 0:在远程桌面环境下,控制台会话通常标识为 ID 为 0 的会话。
  • 物理控制台优先级:如果你通过远程桌面连接时选择 /console 参数,Windows 会优先连接到控制台会话,而不考虑其他活动的 RDP 会话。

2. 会话优先级

在 Windows 中,远程桌面会话(RDP)允许多个用户同时连接到一台计算机。这些远程会话会分配不同的会话 ID,且通常会基于会话的创建时间和活动状态来分配优先级。

会话优先级的工作原理:

  • 控制台会话优先:如果你使用 /console 参数连接,系统会优先选择 ID 为 0 的会话,即控制台会话。这个会话通常是 物理控制台上的用户,即最先登录的用户(或默认的系统管理会话)。不论系统是否存在其他 RDP 会话,/console 会忽略其他会话,直接连接到控制台会话。
  • 其他 RDP 会话:其他 RDP 会话根据其创建的顺序和活动状态进行排序。当你没有使用 /console 参数时,连接到 RDP 会话时,通常会连接到最新的活跃会话,而不是控制台会话。

3. 如何使用 shadow 命令和 /console 选项

当你希望连接到控制台会话时,可以使用 shadow 命令结合 /console 参数。通过这种方式,你会直接连接到主机的物理控制台会话,而不管其他 RDP 会话是否已经存在。

命令示例:

假设你希望连接到一台计算机的控制台会话(通常 ID 为 0),可以使用以下命令:

bashCopy Code
shadow 0 /console

该命令的意义如下:

  • shadow 0:表示连接到会话 ID 为 0 的会话,即控制台会话。
  • /console:确保即使有其他活动会话,命令也会强制连接到控制台会话。

4. 控制台会话与其他 RDP 会话的冲突

  • 多个会话同时存在:如果计算机上有多个 RDP 会话(例如,用户 A 和用户 B 同时远程登录),使用 /console 参数将强制连接到 ID 为 0 的控制台会话,即使其他会话处于活动状态。
  • 断开和重新连接:在某些情况下,如果用户正在进行工作(例如正在运行应用程序)并且系统配置为允许多个 RDP 会话并存,连接到控制台会话可能会断开当前其他会话。不同的 RDP 会话彼此隔离,但控制台会话具有较高的优先级。

5. 使用 query 命令查看会话

在连接前,可以使用 query 命令查看当前计算机上的所有远程桌面会话。该命令帮助你确认控制台会话和其他远程会话的 ID。

示例命令:

bashCopy Code
query user

该命令会显示所有当前登录的用户及其会话 ID,例如:

Copy Code
C:\> query user
 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
 Administrator         console            0   Active  none        12/31/2024 08:00 AM
 User1                 rdp-tcp#1          1   Active  none        12/31/2024 08:15 AM
 User2                 rdp-tcp#2          2   Active  none        12/31/2024 08:20 AM

在上述输出中,Administrator 连接的是控制台会话,ID 为 0,而 User1User2 连接的是其他远程桌面会话,ID 分别为 12

6. 总结

  • 控制台会话优先:使用 /console 参数时,系统会优先连接到控制台会话,无论其他会话是否处于活动状态。控制台会话通常是物理显示器上的会话(ID 为 0)。
  • 多个会话共存:如果有多个远程桌面会话,shadow 命令可以帮助你连接到指定的会话。使用 /console 时,其他会话将不再被连接。
  • 会话优先级:通常,控制台会话具有更高的优先级,特别是在系统启动或没有其他 RDP 会话时,控制台会话是默认连接的会话。

 

在 Windows 11 上,使用 PowerShell 启用远程桌面的操作可以通过一系列命令来实现。以下是启用远程桌面功能的步骤及分类表格化总结。

1. 启用远程桌面功能

操作步骤 PowerShell 命令 描述
启用远程桌面 Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value 0 启用远程桌面功能,设置注册表键值 fDenyTSConnections 为 0。
启用网络级身份验证 (NLA) Enable-NetFirewallRule -DisplayGroup "Remote Desktop" 启用 Windows 防火墙规则,以允许远程桌面连接(NLA 需要开启)。

2. 配置防火墙规则

操作步骤 PowerShell 命令 描述
启用远程桌面防火墙规则 Enable-NetFirewallRule -DisplayGroup "Remote Desktop" 启用远程桌面防火墙规则,允许通过防火墙进行 RDP 连接。
禁用远程桌面防火墙规则 Disable-NetFirewallRule -DisplayGroup "Remote Desktop" 禁用远程桌面防火墙规则,阻止 RDP 连接。

3. 检查远程桌面状态

操作步骤 PowerShell 命令 描述
查看远程桌面是否启用 Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" 查看 fDenyTSConnections 注册表项,确认远程桌面是否已启用。

4. 重启远程桌面服务

操作步骤 PowerShell 命令 描述
重启远程桌面服务 Restart-Service -Name "TermService" 重启远程桌面服务,使设置生效。
启动远程桌面服务 Start-Service -Name "TermService" 启动远程桌面服务,如果服务未运行时,启动它。

5. 验证远程桌面连接

操作步骤 PowerShell 命令 描述
检查远程桌面端口 (3389) 是否开启 Test-NetConnection -ComputerName "localhost" -Port 3389 测试远程桌面服务的默认端口 3389 是否可达,确认远程桌面服务是否正常。

6. 启用 RDP 会话授权和设置

操作步骤 PowerShell 命令 描述
设置用户可以连接 RDP Set-LocalUser -Name "Username" -Enabled $true 启用指定用户允许进行远程桌面连接。
启用管理员远程连接 Add-LocalGroupMember -Group "Remote Desktop Users" -Member "Administrator" 将用户添加到 "远程桌面用户" 组,允许用户进行远程桌面连接。

7. 启用远程桌面连接的 PowerShell 远程功能

操作步骤 PowerShell 命令 描述
启用 PowerShell 远程功能 Enable-PSRemoting -Force 启用 PowerShell 的远程管理功能,这对远程桌面的管理和自动化配置有帮助。

 

启用 Windows 11 上的远程桌面通过 PowerShell 操作非常灵活,可以从注册表配置、启用防火墙规则,到启动远程桌面服务及相关功能等进行全面管理。按照上面的分类表格,可以轻松完成远程桌面的启用与配置工作,包括远程桌面功能本身、网络安全性设置、服务重启和端口检测等步骤。

 


在 Windows 11 中,使用 PowerShell 来获取远程桌面状态和配置,可以通过多种 PowerShell 命令获取有关远程桌面功能的详细信息。以下是基于 PowerShell 获取远程桌面相关信息的分类和表格化总结。

1. 获取远程桌面启用状态

操作步骤 PowerShell 命令 描述
查看远程桌面启用状态 Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" 检查注册表项 fDenyTSConnections 的值,确定远程桌面是否启用。
检查远程桌面防火墙规则 Get-NetFirewallRule -DisplayGroup "Remote Desktop" 查看与远程桌面相关的防火墙规则,确认是否启用了 RDP 连接。

2. 获取远程桌面服务状态

操作步骤 PowerShell 命令 描述
查看远程桌面服务状态 Get-Service -Name "TermService" 查看远程桌面服务 (TermService) 的当前状态。
查看 RDP 服务是否正在运行 `Get-Service -Name "TermService" Select-Object Status`

3. 检查 RDP 端口(3389)是否开启

操作步骤 PowerShell 命令 描述
检查端口 3389 是否开启 Test-NetConnection -ComputerName "localhost" -Port 3389 测试远程桌面默认端口 (3389) 是否开启。

4. 获取远程桌面配置

操作步骤 PowerShell 命令 描述
查看远程桌面网络级身份验证状态 Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "UserAuthentication" 检查是否启用了远程桌面的网络级身份验证(NLA)。
查看远程桌面设置 Get-RemoteDesktop (如果已安装相关模块) 查看远程桌面设置的详细信息(可能需要安装相关模块,Get-RemoteDesktop 不是原生 PowerShell 命令)。

5. 获取本地用户组配置

操作步骤 PowerShell 命令 描述
查看 "远程桌面用户" 组 Get-LocalGroupMember -Group "Remote Desktop Users" 查看哪些本地用户被添加到远程桌面用户组,允许他们进行远程桌面连接。
查看管理员是否有远程桌面权限 Get-LocalGroupMember -Group "Administrators" 查看管理员组中的成员,确认管理员是否有远程桌面权限。

6. 检查远程桌面端口防火墙规则

操作步骤 PowerShell 命令 描述
查看远程桌面端口规则 `Get-NetFirewallRule Where-Object {$_.DisplayName -like "Remote Desktop"}

7. 获取 RDP 连接日志

操作步骤 PowerShell 命令 描述
查看远程桌面登录日志 `Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" Select-Object TimeCreated, Message`

8. 检查远程桌面许可状态

操作步骤 PowerShell 命令 描述
查看远程桌面许可状态 Get-WmiObject -Class Win32_TerminalServiceSetting 获取远程桌面许可证信息,包括最大许可数和当前许可证状态。

总结

通过上述 PowerShell 命令,您可以全面了解 Windows 11 上远程桌面服务的配置、启用状态、防火墙设置及用户权限等。结合这些命令,管理员能够方便地管理和排查远程桌面服务的相关问题。通过其他方法如查看注册表、服务状态、网络配置等获取所需信息。


如何检查远程桌面设置?

使用其他 PowerShell 命令来获取远程桌面的配置信息,以下是一些常见的命令:

1. 查看远程桌面是否启用

可以通过查询注册表项来检查远程桌面是否启用:

powershellCopy Code
Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections"
  • 如果 fDenyTSConnections 的值是 0,则表示远程桌面已启用。
  • 如果 fDenyTSConnections 的值是 1,则表示远程桌面已禁用。

2. 查看远程桌面服务状态

使用 Get-Service 命令查看远程桌面服务(TermService)的状态:

powershellCopy Code
Get-Service -Name "TermService"

3. 查看防火墙规则

远程桌面需要通过防火墙开放 3389 端口,可以使用以下命令查看与远程桌面相关的防火墙规则:

powershellCopy Code
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "*Remote Desktop*"}

4. 检查 RDP 端口是否开放

你可以使用 Test-NetConnection 来检查 RDP 端口(默认是 3389)是否开放:

powershellCopy Code
Test-NetConnection -ComputerName "localhost" -Port 3389

5. 查看远程桌面用户组

你可以通过以下命令查看哪些用户被添加到 "Remote Desktop Users" 组中:

powershellCopy Code
Get-LocalGroupMember -Group "Remote Desktop Users"

 

 

# 获取远程桌面连接的端口号
(Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp').PortNumber
# 检查远程桌面连接是否启用
(Get-WmiObject -Class Win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).AllowTSConnections
# 查看远程桌面配置
Get-WmiObject -List | Where-Object {$_.Name -like "*Terminal*"}

# 查询与远程桌面连接相关的防火墙规则
Get-NetFirewallRule | Where-Object { $_.DisplayName -like "*Remote Desktop*" -or $_.DisplayName -like "*RDP*" }


# 检查远程桌面连接设置 
Get-WmiObject -Namespace root\CIMv2\TerminalServices -Class Win32_TSGeneralSetting

 

netsh advfirewall show allprofiles

Get-NetFirewallProfile

Get-MpComputerStatus

 

posted @ 2024-01-02 08:23  suv789  阅读(1125)  评论(0)    收藏  举报