Windows计算机如何远程启用远程桌面(RDP)
远程桌面协议 (RDP) 是一种流行、简单且方便的连接到远程 Windows 计算机的方法。借助 RDP,您可以完全访问远程计算机的图形桌面环境并使用它,就像它是您自己的本地设备一样。默认情况下,远程桌面在 Windows 和 Windows Server 的桌面版本上均处于禁用状态。在本文中,我们将了解在 Windows 中启用 RDP 的几种方法。
本地启用和禁用远程桌面
在 Windows 10 和 11 上启用远程桌面的最直观方法是使用 GUI。您可以启用 RDP:
从经典的 SystemPropertiesRemote 控制面板:运行命令 SystemPropertiesRemote 并启用远程桌面部分中的允许远程连接到此计算机选项;从现代设置面板:运行 ms-settings:remotedesktop 命令并切换选项远程桌面:但是,这需要对要启用 RDP 的计算机进行本地访问。您通常可以向用户询问(需要本地管理员权限)或本地技术支持。但是,如果远程分支机构中没有人可以在本地启用远程桌面怎么办?
让我们看一下允许您在远程主机(服务器或计算机)上远程启用远程桌面 (RDP) 的几种方法,
使用远程注册表启用 RDP
您可以使用注册表编辑器在远程计算机上启用远程桌面。这需要:
远程计算机必须可通过网络访问;您必须知道远程计算机上具有本地管理员权限的帐户的凭据;远程注册表服务必须在远程计算机上运行(您可以通过 services.msc 管理单元、GPO 或使用命令 sc \RemotePCName start RemoteRegistry 来启用它)。因此,要通过远程注册表启用远程桌面,请按照下列步骤操作:
按Win+R组合键,输入regedit.exe>确定;在注册表编辑器中选择文件>连接网络注册表;指定远程计算机的主机名或 IP 地址。如果远程计算机无法授权您作为当前用户,系统将提示您输入凭据;远程计算机的注册表将出现在注册表编辑器中(只能访问 HKLM 和 HKEY_Users 配置单元);转到远程计算机上的以下注册表项:HKLMSYSTEMCurrentControlSetControlTerminal Server。将 fDenyTSConnections 参数 (Type=REG_DWORD) 的值从 1 更改为 0;如果远程计算机上启用了防火墙,则必须启用允许远程桌面连接的规则。您可以通过 GPO、PowerShell Remoting 或使用 Psexec 启用它(请查看本指南的下一部分)。如何使用 PsExec 工具远程启用 RDP?
您可以使用 PsExec cmd 工具在远程 Windows 设备上启用远程桌面。
从 Microsoft 网站下载 PsExec 工具包,并将 PSTools.zip 存档解压到本地文件夹。
以管理员身份打开命令提示符并转到 PSTools 目录:
CDc:PSPStools要使用 PSExec 在域中的远程计算机上启用 RDP,请运行以下命令:
PsExec.exe /accepteula \RemoteComputerName_or_IP regadd"HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server"/v fDenyTSConnections /t REG_DWORD /d0/f然后在 Windows Defender 防火墙中启用访问 RDP 端口的规则:
PsExec.exe /accepteula \RemoteComputerName_or_IP netsh advfirewall firewallsetrulegroup="remote desktop"newenable=Yes如果远程计算机位于不同的域或工作组中,您可以提供具有管理员权限的用户名来连接到远程计算机:
PsExec.exe /accepteula \RemoteComputerName_or_IP -u administrator regadd"HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server"/v fDenyTSConnections /t REG_DWORD /d0/f然后允许到 RDP 端口 (3389/TCP) 的入站连接:
PsExec.exe /accepteula \RemoteComputerName_or_IP -u administrator netsh advfirewall firewallsetrulegroup="remote desktop"newenable=Yes现在尝试通过 RDP 连接到远程计算机。
使用 PowerShell 远程启用远程桌面
要远程启用 RDP,您需要在远程计算机上配置并运行 WinRM 服务(Windows 远程管理)。从 Windows Server 2012 开始,WinRM 服务在所有版本的 Windows Server 中默认启用。但是,WinRM 在客户端操作系统(例如 Windows 10 或 11)中默认禁用。
您可以使用 GPO 或在本地使用 PowerShell 在加入域的计算机上启用 WinRM。在 Windows 10/11 上本地启用 WinRM 服务并允许通过 PowerShell 远程处理进行访问的最简单方法是使用以下命令:
Enable-PSRemotingWinRM 已更新以接收请求。
WinRM 服务类型更改成功。WinRM 服务已启动。
接下来,您需要检查远程计算机上是否启用了 WinRM,以及是否允许 PSRemoting 连接。运行命令:
Test-WsMan192.168.31.102如果远程计算机上的 WinRM 服务响应,您将收到以下响应:
如果该服务被禁用或访问被 Windows Defender 防火墙阻止,则会出现错误:
Test-WsMan WSManFault:WinRM 无法完成操作。验证指定的计算机名称是否有效、该计算机是否可通过网络访问、WinRM 服务的防火墙例外是否已启用并允许从此计算机进行访问。默认情况下,公共配置文件的 WinRM 防火墙例外限制对同一本地子网内的远程计算机的访问。
因此,要通过 PowerShell 远程启用远程桌面,远程计算机必须满足以下要求:
WinRM 服务应该启动;您必须拥有远程设备的管理员权限;具有高级安全规则的 Windows Defender 防火墙必须接受 WinRM 端口 TCP 5985 和 5986 上的 PowerShell 远程处理。您可以使用以下命令启用 WinRM 防火墙规则:netsh advfirewall 防火墙设置规则组=Windows 远程管理新启用=yes)假设您要在 Windows Server 2022/2019/2016/2012R2 上远程启用 RDP。打开计算机上的PowerShell控制台并运行以下命令远程连接到服务器:
Enter-PSSession-ComputerNameserver.domain.local-Credentialdomainadministrator提示:Enter-PSSession 和 Invoke-Command cmdlet 允许您通过 WinRM 在远程计算机上运行 PowerShell 脚本。
现在,您已经与计算机建立了远程会话,现在可以对其运行 PowerShell 命令。要启用远程桌面,只需将注册表参数fDenyTSConnections从1更改为0即可。运行命令:
Set-ItemProperty -PathHKLM:SystemCurrentControlSetControlTerminal Server-name"fDenyTSConnections"-Value0当以这种方式(与 GUI 方法相反)启用 RDP 时,您需要手动启用远程桌面的 Windows 防火墙规则。运行命令:
Enable-NetFirewallRule -DisplayGroup"Remote Desktop"如果由于某种原因缺少此 RDP 防火墙规则,您可以使用 netsh 手动创建它:
netsh advfirewall firewalladdrule name="allow RemoteDesktop"dir=inprotocol=TCP localport=3389action=allow或使用 Powershell:
New-NetFirewallRule -DisplayNameAllow RemoteDesktop-Profile @(Domain,Private) -Direction Inbound -Action Allow -Protocol TCP -LocalPort @(3389)如果要限制允许连接到远程桌面的主机或子网,可以创建自定义规则,允许 Windows 防火墙仅接受来自特定 IP 地址、子网或 IP 范围的传入 RDP 连接。在这种情况下,您需要使用以下命令而不是上一个命令:
New-NetFirewallRule-DisplayNameRestrict_RDP_access"-DirectionInbound-ProtocolTCP-LocalPort3389-RemoteAddress192.168.1.0/24,192.168.2.100-ActionAllow如果需要启用安全 RDP 身份验证(NLA – 网络级身份验证),请运行以下命令:
Set-ItemProperty -PathHKLM:SystemCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp-name"UserAuthentication"-Value1现在您可以从您的计算机检查远程主机上 TCP 端口 3389 的可用性。运行命令:
Test-NetConnection192.168.1.11-CommonTCPPortrdp应该有这样的结果:
ComputerName :192.168.1.11RemoteAddress :192.168.1.11RemotePort :3389InterfaceAlias :Ethernet0SourceAddress :192.168.1.90TcpTestSucceeded :True这意味着远程主机上的 RDP 已启用,您可以使用 mstsc.exe、RDCMan 或任何替代 RDP 客户端建立远程桌面连接。
暗示。如果需要同时在多台远程计算机上启用 RDP,可以使用以下 PowerShell 脚本:
$comps = Server1, Server2, Server3, Server4 Invoke-Command –Computername $comps –ScriptBlock {Set-ItemProperty -Path "HKLM:SystemCurrentControlSetControlTerminal Server" -Name "fDenyTSConnections" –Value 0} Invoke-Command –Computername $comps –ScriptBlock {Enable-NetFirewallRule -DisplayGroup "Remote Desktop"}
默认情况下,只有本地管理员组的成员才能通过 RDP 进行远程连接。要允许非管理员用户进行 RDP 连接,只需将域用户添加到远程桌面组即可。
您可以使用本地用户和组 MMC 管理单元 (LUSRMGR.MSC) 将所需用户添加到本地远程桌面用户。
或者,您可以使用 Enter-PSSession 远程更改 RD 用户组成员身份。使用以下命令将域用户ASmith添加到本地组中:
net localgroup"remote desktop users"/add"contosoasmith或者,您可以使用另一个 PS Remoting 命令 Invoke-Command,而不是 Enter-PSSession cmdlet:
Invoke-Command -Scriptblock {net localgroup"remote desktop users"/add"contosoasmith} -Computer Server1.contoso.com如何使用PowerShell检查远程计算机上是否启用了远程桌面?
考虑一个 PowerShell 脚本,它允许您远程获取网络中多台计算机上的 RDP 状态。设置一个变量,其中包含要检查远程桌面是否已启用的远程计算机列表:
$comps=’wks101’,’wks102’,’wks112’, ‘wks223’您还可以检查 Active Directory 域中的所有计算机上是否启用了 RDP。要获取 AD 中活动计算机的列表,您可以使用 PowerShell Active Directory 模块中的 Get-ADComputer cmdlet:
$comps = (Get-ADComputer -Filteroperatingsystem-like"*Windows 10*"-and enabled -eq"true").Name现在您需要获取列表中远程计算机上的 fDenyTSConnections 注册表参数的状态。
$Report = @() $comps =localhost,localhostforeach($comp in $comps) { $RDPRegistry = Invoke-Command $comp -ScriptBlock { (Get-ItemPropertyHKLM:SYSTEMCurrentControlSetControlTerminal Server).fDenyTSConnections } -ErrorAction SilentlyContinue $RDPState =switch($RDPRegistry) {0{"Enabled"}1{"Disabled"}Default{"n/a"} } $objReport = [PSCustomObject]@{ ComputerName = $comp RDPState = $RDPState } $Report += $objReport } $Report因此,您将获得一份很酷的报告,显示网络上的哪些计算机启用了远程桌面。
如何通过WMI启用远程桌面?
如果要在禁用 WinRM 的远程计算机上启用 RDP,可以使用 WMI PowerShell 命令。
提示:要访问远程计算机上的 WMI 命名空间,必须打开 TCP 端口 135,并且帐户必须具有 WMI 和 DCOM 访问权限。
要检查远程计算机 192.168.1.90 上是否启用了 RDP 访问,请运行以下命令(请参阅AllowTSConnections 属性的值):
Get-WmiObject-ClassWin32_TerminalServiceSetting-NamespacerootCIMV2TerminalServices-Computer192.168.1.90-Authentication6要启用 RDP 并添加 Windows 防火墙例外规则,请运行以下命令:
(Get-WmiObject-ClassWin32_TerminalServiceSetting-NamespacerootCIMV2TerminalServices-Computer192.168.1.90-Authentication6).SetAllowTSConnections(1,1)