只有在之前多次启用 RDP 的情况下,通过更改注册表设置启用 RDP 才有效

Enabling RDP by changing registry setting only works if RDP has been enabled several times previously

我正在尝试构建一个自动配置批处理文件,以按照我需要的方式设置新 PC。我需要做的一件事是启用 RDP。

我发现 this post 提供了涉及更改注册表项的解决方案:

reg add "HKLM\System\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0x00000000 /f

许多其他帖子和博客给出了相同的建议。

但是,当我在我的系统上测试它时,它只有在之前启用远程桌面几次的情况下才有效。

如果我使用标准设置界面启用 RDP,我会收到一个“启用远程桌面”弹出窗口,要求我确认是否允许 RDP。我 select 是的,并且注册表设置发生了变化。我使用设置界面关闭 RDP,我再次弹出确认,我单击是,然后注册表设置变回。

但是,反之则不然——更改注册表设置不会影响标准设置界面中的滑块。将注册表项设置为零不会启用 RDP。我已经检查了防火墙是否配置为允许RDP,并且相关的RDP服务都已启动。一旦打开设置 RDP 滑块,我就可以将 RDP 连接到机器中。一旦我关闭它,即使我改回注册表设置并确保所有 services/firewall 设置都正常,我也无法再使用 RDP。

但是,如果我对“启用 RDP 设置”滑块的操作足够混乱,最终它会停止显示确认弹出窗口并直接显示。此时,更改该注册表项会产生预期的效果 - 更改注册表项会更改设置滑块的位置,并允许我按预期通过 RDP 进入机器。

显然这会使我的批处理文件在新 PC 上无效,这就是它的全部目的。

我该如何克服这个问题?

Windows 10 企业 LTSC 版本 1809

(编辑以澄清一些要点)

以下 powershell 脚本适用于我:

set-itemproperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name "fDenyTSConnections" -Value 0
set-itemproperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TCP\' -Name "UserAuthentication" -Value 1
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"

我看到 here 描述了相同的过程,并解释了每个项目的作用。

所以也许您的问题不是 运行 这些步骤之一,但也不清楚您是否在 运行 您的脚本之后 根据经验测试 RDP 或只看 UI - 它可能仍在显示缓存的 RDP 状态。

我认为等效的批处理文件是:

reg add "HKLM\System\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0x00000000 /f
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-TCP" /v UserAuthentication /t REG_DWORD /d 0x00000001 /f
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes

但使用 powershell 可能更适合未来。

我可以建议使用 powershell 这样做吗(如果只需要批处理,你可以 运行 来自 CMD/Batch 的 powershell)。 关注 this 篇文章。

P.S 注意,他们建议它用于远程(如果 winrm 处于活动状态),但可以在本地执行