适用范围
- 适用版本:Windows 10 / Windows 11 专业版、企业版
- 限制说明:家庭版仅支持作为 RDP 客户端,不支持被远程访问
- 前置提醒:
- 大部分命令需要以 管理员身份 运行 PowerShell 或 CMD
Administrators组成员默认拥有 RDP 登录权限,无需额外加入Remote Desktop Users组SeDenyRemoteInteractiveLogonRight拒绝登录策略优先级最高,即使账户在管理员组也会被拒绝- 微软账户(MicrosoftAccount) 在 RDP 场景下容易触发 Windows Hello / PIN / NLA 问题,强烈建议使用纯本地账户进行远程管理
1. 用户账户基础管理
1.1 查看本机全部用户(CMD)
net user
1.2 PowerShell 查看账户详细信息
# 查看单个账户状态
Get-LocalUser -Name "Administrator"
# 完整详情输出(常用属性)
Get-LocalUser Administrator | fl Name,Enabled,PrincipalSource,PasswordExpired
# 列出所有本地账户,并区分账户来源类型
Get-LocalUser | select Name,Enabled,PrincipalSource
PrincipalSource 说明:
Local→ 纯本地账户,RDP 稳定可靠MicrosoftAccount→ 绑定微软云账户,RDP 易出现 Hello/PIN/NLA 认证问题
1.3 启用被禁用的账户
Enable-LocalUser -Name "Administrator"
1.4 设置账户密码(交互式,不输出明文)
$secpwd = Read-Host "输入账户新密码" -AsSecureString
Set-LocalUser -Name "Administrator" -Password $secpwd
1.5 创建全新纯本地管理员账户(推荐用于 RDP)
$secpwd = Read-Host "设置本地管理员密码" -AsSecureString
New-LocalUser -Name "localadmin" -Password $secpwd -FullName "本地远程管理员" -PasswordNeverExpires $true
Add-LocalGroupMember -Group "Administrators" -Name "localadmin"
Add-LocalGroupMember -Group "Remote Desktop Users" -Name "localadmin"
该账户为纯本地账户,不受微软账户认证限制,适合长期远程管理。
2. RDP 权限配置(组策略与安全策略)
核心原则:
Administrators组成员默认允许 RDP,无需加入Remote Desktop Users- 普通(非管理员)账号若要远程登录,必须加入
Remote Desktop Users组
2.1 将用户加入远程桌面用户组
CMD 版本:
net localgroup "Remote Desktop Users" "用户名" /add
PowerShell 版本:
Add-LocalGroupMember -Group "Remote Desktop Users" -Name "用户名"
2.2 查看远程桌面用户组成员
Get-LocalGroupMember -Group "Remote Desktop Users"
2.3 查看管理员组成员
Get-LocalGroupMember -Group "Administrators"
2.4 导出安全策略,检查 RDP 允许/拒绝登录列表
secedit /export /cfg c:\secpol.cfg
type c:\secpol.cfg | findstr SeRemoteInteractive
SeRemoteInteractiveLogonRight→ 允许 RDP 登录的账户列表SeDenyRemoteInteractiveLogonRight→ 拒绝 RDP 登录的账户列表(优先级最高)
示例:拒绝内置 Administrator 远程登录(账户仍可本地登录) 内置 Administrator 的 SID 固定为
S-1-5-32-500,推荐使用 SID 配置策略,不受账户重命名影响。
2.5 刷新本地安全策略,立即生效
gpupdate /force
3. RDP 服务与防火墙检查
3.1 检查 RDP 服务状态
Get-Service TermService
状态必须为 Running。若未运行,手动启动:
Start-Service TermService
重启服务(更改配置后常用):
Restart-Service TermService -Force
3.2 RDP 关键注册表参数
# fDenyTSConnections:0 开启 RDP,1 关闭 RDP
Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections
# UserAuthentication:1 启用 NLA(网络级别身份验证),0 关闭 NLA(仅排错时临时使用)
Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication
开启 RDP 命令:
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0
Restart-Service TermService -Force
3.3 防火墙放行 RDP
Get-NetFirewallRule -Name *RemoteDesktop* | select Name,Enabled
确保 RemoteDesktop-UserMode-TCP-In 的 Enabled 为 True。
若未启用,可通过以下命令开启(管理员):
Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-TCP-In"
4. 网络信息与 RDP 端口配置
4.1 查看本机 IPv4 地址
CMD 方式:
ipconfig
仅查看 IPv4 地址(过滤输出):
@for /f "tokens=2 delims=:" %i in ('ipconfig ^| findstr "IPv4"') do @for /f %j in ("%i") do @echo %j
PowerShell 方式(推荐,输出更清晰):
Get-NetIPAddress -AddressFamily IPv4 | select InterfaceAlias,IPAddress,PrefixLength
仅查看非回环的有效 IPv4 地址:
Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.IPAddress -ne "127.0.0.1" } | select IPAddress,InterfaceAlias
查看网关和 DNS 信息:
Get-NetIPConfiguration -Detailed | Select-Object InterfaceAlias,InterfaceDescription,
@{n='IPv4地址';e={$_.IPv4Address.IPAddress}},
@{n='网关';e={$_.IPv4DefaultGateway.NextHop}},
@{n='DNS';e={$_.DNSServer.ServerAddresses}} | Format-List
RDP 连接时需要使用目标机器的 IPv4 地址(或主机名),确保客户端与服务器在同一网络或可通过该地址路由到达。
4.2 RDP 默认端口说明
- RDP 默认监听端口:3389(TCP 和 UDP)
- 连接格式:
mstsc /v:IP地址或mstsc /v:IP地址:端口号 - 示例:
mstsc /v:192.168.1.100或mstsc /v:192.168.1.100:13389
4.3 查看当前 RDP 端口
reg query "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
输出中的 PortNumber 为十进制值,需要转换。若显示 0x00000d3d,则十进制为 3389。
PowerShell 直接查看十进制端口:
(Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber).PortNumber
4.4 修改 RDP 端口(管理员)
修改注册表将 RDP 端口改为自定义值(例如 13389):
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 13389 /f
修改后需重启服务并更新防火墙规则:
Restart-Service TermService -Force
Enable-NetFirewallRule -Name "RemoteDesktop-UserMode-TCP-In"
修改端口后,客户端连接时需手动指定新端口:
mstsc /v:192.168.1.100:13389
4.5 检查网络连通性
在客户端(本地电脑)测试到服务器的 RDP 端口是否可达:
telnet 192.168.1.100 3389
或使用 PowerShell 测试端口:
Test-NetConnection -ComputerName 192.168.1.100 -Port 3389
若 TcpTestSucceeded 为 True,说明端口可达;若为 False,需检查防火墙和网络路由。
5. 会话查询与会话注销
5.1 查看当前登录会话
query user
输出示例:
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
user1 console 1 Active . 2026/08/20 10:00
user2 rdp-tcp#3 2 Active . 2026/08/20 10:05
console→ 本机物理登录rdp-tcp#xx→ 远程桌面会话>标记当前活跃会话(仅在该会话中执行命令时可见)
5.2 查看全部会话(包含已断开但未注销的残留会话)
query session
5.3 注销指定会话(释放占用资源)
logoff 会话ID
例如注销 ID 为 2 的会话:
logoff 2
6. 客户端历史凭据清理(在本地电脑执行,非远程服务器)
当 RDP 客户端(mstsc)保存了错误的凭据或历史 IP,导致连接异常时,可执行以下批处理一键清理。
一键清理批处理(CMD 管理员或普通用户均可)
taskkill /im mstsc.exe /f >nul 2>&1
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f >nul 2>&1
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /f >nul 2>&1
reg add "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" >nul 2>&1
del /f /q /a:s:h "%USERPROFILE%\Documents\Default.rdp" >nul 2>&1
for /f "tokens=2 delims= " %%a in ('cmdkey /list ^| findstr Target^=TERMSRV') do cmdkey /delete %%a >nul 2>&1
del /f /q %AppData%\Microsoft\Windows\Recent\AutomaticDestinations\*.automaticDestinations-ms >nul 2>&1
强制弹出密码输入框(忽略保存的凭据)
mstsc /v:目标IP /prompt
图形化打开凭据管理器
control /name Microsoft.CredentialManager
在"Windows 凭据"下删除所有以 TERMSRV/ 开头的条目。
7. 常见加固操作(保留账户、禁止 RDP、锁屏隐藏)
场景:需要保留 Administrator 账户用于本地或服务运行,但禁止其远程登录,同时不在锁屏界面显示该账户磁贴。
7.1 通过安全策略拒绝 Administrator 远程登录
导出当前策略或直接使用 secpol.msc 图形界面,在"本地策略" → "用户权限分配" → "拒绝通过远程桌面服务登录"中添加 Administrator 账户或其 SID S-1-5-32-500。
命令行方式(需管理员):
secedit /export /cfg c:\secpol.cfg
# 编辑 c:\secpol.cfg,在 SeDenyRemoteInteractiveLogonRight 后添加 *S-1-5-32-500
secedit /configure /cfg c:\secpol.cfg /db c:\secpol.db
gpupdate /force
7.2 锁屏界面隐藏 Administrator(注册表)
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v Administrator /t REG_DWORD /d 0 /f
- 值
0→ 隐藏 - 值
1→ 恢复显示(重启生效)
风险提示:操作前务必确认存在另一个可用的 RDP 管理员账户,以免锁死后失去远程管理入口。
8. 常见故障排查
8.1 微软账户 RDP 报错"用户账户当前被禁用"
现象:账户实际已启用,但 RDP 提示被禁用,常伴有 Windows Hello / PIN 冲突。
解决方法:
- 打开 设置 → 账户 → 登录选项,关闭「为提高安全性,仅允许此设备上的 Microsoft 账户使用 Windows Hello 登录」(若存在该选项)
- 在本地锁屏界面,使用微软账户的网页密码(非 PIN)登录一次,完成凭据缓存
- RDP 连接时,用户名格式必须为
MicrosoftAccount\邮箱地址(见第 10 节) - 若问题依旧,可临时关闭 NLA 测试(
UserAuthentication=0),验证成功后改回1 - 写入注册表修复 UAC 远程令牌过滤问题(管理员):
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
最彻底的解决方案:新建纯本地账户作为远程管理专用账号。
8.2 mstsc 不弹出密码输入窗口(直接尝试自动登录失败)
原因:客户端凭据管理器残留了 TERMSRV 凭据。
解决:执行第 6 节的清理命令,或使用 /prompt 参数强制弹窗。
8.3 登录失败,查看详细错误日志
打开 事件查看器 → Windows 日志 → 安全,筛选事件 ID 4625(登录失败),查看"失败子状态码"可定位具体原因(如密码错误、账户受限、NLA 不匹配等)。
常见子状态码:
| 子状态码 | 含义 |
|---|---|
0xC000006A |
密码错误 |
0xC000006D |
用户名或密码错误(通用) |
0xC0000072 |
账户被禁用 |
0xC0000193 |
账户过期 |
0xC0000224 |
需要更改密码(首次登录) |
0xC0000234 |
账户锁定 |
9. 一键校验全套状态脚本
以管理员身份运行 PowerShell,快速检查 RDP 关键状态:
Write-Host "=====本机IPv4地址===="
Get-NetIPAddress -AddressFamily IPv4 | Where-Object { $_.IPAddress -ne "127.0.0.1" } | select IPAddress,InterfaceAlias
Write-Host "`n=====本地账户列表===="
Get-LocalUser | select Name,Enabled,PrincipalSource
Write-Host "`n=====Administrators管理员组===="
Get-LocalGroupMember -Group "Administrators"
Write-Host "`n=====Remote Desktop Users组===="
Get-LocalGroupMember -Group "Remote Desktop Users"
Write-Host "`n=====RDP服务状态===="
Get-Service TermService
Write-Host "`n=====RDP注册表开关===="
Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections
Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication
Write-Host "`n=====RDP端口号===="
(Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name PortNumber).PortNumber
Write-Host "`n=====当前登录会话===="
query user
Write-Host "`n=====导出RDP安全策略===="
secedit /export /cfg c:\secpol.check.cfg
type c:\secpol.check.cfg | findstr SeRemoteInteractive
Write-Host "`n=====防火墙规则状态===="
Get-NetFirewallRule -Name *RemoteDesktop* | select DisplayName,Enabled
Write-Host "`n=====校验完成===="
10. RDP 登录用户名格式速查表
| 账户类型 | RDP 用户名写法 | 密码说明 |
|---|---|---|
| 纯本地账户 | 用户名 或 .\用户名 |
使用本地账户密码,无需联网验证 |
| 微软账户 | MicrosoftAccount\邮箱地址(例如 MicrosoftAccount\user@outlook.com) |
使用微软网页账号密码(绝不能填写 PIN 或 Hello 指纹),目标机器需联网校验 |
| 域账户(如有) | 域名\用户名 |
使用域密码,需域控可达 |
重要提醒:
- 空密码的本地账户默认禁止 RDP 登录(需修改组策略或设置非空密码)
- 生产环境强烈建议保持 NLA(UserAuthentication=1)开启,不要长期关闭
- 执行任何加固操作前,务必确保至少存在一个可用的远程管理账号,避免将自己锁在门外
总结
- 优先使用纯本地管理员账户进行 RDP 管理,避开微软账户的坑
- 定期检查
SeDenyRemoteInteractiveLogonRight策略,防止误拒绝 - 保持 RDP 服务运行、防火墙放行、NLA 开启
- 客户端凭据定期清理,避免缓存冲突
- 善用一键校验脚本快速诊断状态