补充说明
该脚本通过 Windows 内置 cmdkey 凭据管理工具实现 RDP 一键连接,核心原理是先将密码写入系统凭据存储,再启动 mstsc 自动读取凭据完成登录,整个过程无需用户手动输入密码。
PowerShell 命令
$RdpServer = "10.10.10.66"
$RdpUser = "Administrator"
$RdpPass = "你的密码"
# 清理旧凭据
cmdkey /delete:"TERMSRV/$RdpServer" 2>&1 | Out-Null
# 写入凭据
cmdkey /generic:"TERMSRV/$RdpServer" /user:$RdpUser /pass:$RdpPass
# 启动RDP
Start-Process mstsc -ArgumentList "/v:$RdpServer"
# 延时清理凭据
Start-Sleep -Seconds 6
cmdkey /delete:"TERMSRV/$RdpServer" 2>&1 | Out-Null
- 执行后自动打开 mstsc 远程桌面窗口,无弹窗提示密码输入
- 延时6秒后自动删除系统凭据,不留残余密码
CMD 命令
@echo off
:: 配置
set RDP_IP=10.10.10.66
set RDP_PORT=3389
set RDP_USER=Administrator
set RDP_PASS="你的密码"
:: 先删除旧的同服务器凭据,避免冲突
cmdkey /delete:TERMSRV/%RDP_IP% >nul 2>&1
:: 写入远程桌面凭据 TERMSRV
cmdkey /generic:TERMSRV/%RDP_IP% /user:%RDP_USER% /pass:%RDP_PASS%
:: 发起连接;/f 全屏;去掉/f就是窗口模式
mstsc /v:%RDP_IP%:%RDP_PORT% /f
:: 延时几秒后清除凭据(可选,不残留密码在系统)
timeout /t 6 /nobreak >nul
cmdkey /delete:TERMSRV/%RDP_IP% >nul 2>&1
/f参数为全屏模式,去掉/f则以窗口模式启动- 可自定义
RDP_PORT支持非标准端口(默认3389)
工作流程
| 步骤 | 说明 |
|---|---|
| 1. 清理旧凭据 | 删除同服务器的历史 TERMSRV 凭据,避免冲突 |
| 2. 写入新凭据 | 通过 cmdkey /generic 写入目标 IP、用户名、密码 |
| 3. 启动 mstsc | 自动连接远程桌面,无需手动输入密码 |
| 4. 延时清理凭据 | 连接成功后延时删除系统中保存的密码,不留痕迹 |
注意事项
- PowerShell 版本需要 PowerShell 环境(Windows 10/11 默认自带)
- CMD 版本可直接保存为
.bat文件运行,兼容性更好 - 密码中若包含特殊字符,PowerShell 版本建议用单引号包裹
$RdpPass的值 cmdkey /generic:TERMSRV/IP写入的凭据存在于 Windows 凭据管理器,连接后会被自动清理- 延时清理时间(6秒)可根据实际情况调整,确保 mstsc 已建立连接
mstsc /f全屏连接,去掉/f即为窗口模式- 建议在可信内网环境下使用,明文密码会短暂出现在进程参数中
cmdkey 凭据管理原理
cmdkey 是 Windows 自带的凭据管理命令行工具,支持在 Windows 凭据管理器中增删改查条目:
| 命令 | 说明 |
|---|---|
cmdkey /generic:IP /user:用户名 /pass:密码 |
写入一条凭据 |
cmdkey /delete:IP |
删除指定凭据 |
cmdkey /list |
列出所有已保存的凭据 |
mstsc 启动时会自动从 Windows 凭据管理器中查找
TERMSRV/IP对应的凭据,找到则自动登录,找不到则弹出密码输入框。
TERMSRV 命名规则
凭据管理器中 RDP 凭据的 key 格式为:
TERMSRV/服务器地址
TERMSRV/10.10.10.66→ IP 地址连接TERMSRV/myserver.domain.com→ 域名连接TERMSRV/10.10.10.66:13389→ 非标准端口连接
本文脚本先
cmdkey /delete清理旧条目再写入新条目,避免多端口或多 IP 场景下凭据冲突。
使用场景
| 场景 | 推荐版本 | 说明 |
|---|---|---|
| 临时连接一次内网服务器 | PowerShell 单行命令 | 复制粘贴即可,无需保存文件 |
| 频繁连接固定服务器 | CMD .bat 批处理 |
保存为 .bat 双击运行,修改顶部配置即可 |
| 自动化运维脚本调用 | 任一版本 | 脚本中嵌入 RDP 连接逻辑,无需人工干预 |
| 内网可信环境快速运维 | 任一版本 | 省去每次手动输入密码的步骤 |
密码安全说明
- 脚本运行时密码以明文形式短暂出现在进程命令行中(可通过任务管理器"命令行"列查看),仅限可信内网使用
cmdkey写入的凭据保存在 Windows 凭据管理器(Control Userpasswords2或control /name Microsoft.CredentialManager可查看)- 连接成功后脚本会自动延时清理,正常情况下凭据不会残留在系统中
- 若脚本中途被强制终止(如
Ctrl+C),凭据可能未被清理,需手动执行cmdkey /delete:TERMSRV/IP删除 - 延时时间(6秒)需大于 mstsc 读取凭据的时间,过短会导致凭据被清理后连接失败
常用 mstsc 参数
| 参数 | 说明 |
|---|---|
/v:IP |
指定远程服务器地址 |
/v:IP:端口 |
指定远程服务器地址和端口 |
/f |
全屏模式连接 |
/w:宽 /h:高 |
指定窗口分辨率(如 /w:1920 /h:1080) |
/prompt |
弹出密码输入框,忽略已保存凭据 |
/admin |
管理员会话模式(强制单用户) |
/span |
多显示器跨屏全屏 |
PowerShell 单行粘贴版本
在 PowerShell 中直接粘贴以下命令(修改 IP、用户名、密码即可):
cmdkey /delete:"TERMSRV/10.10.10.66" 2>&1 | Out-Null; cmdkey /generic:"TERMSRV/10.10.10.66" /user:Administrator /pass:"你的密码"; Start-Process mstsc -ArgumentList "/v:10.10.10.66"; Start-Sleep -Seconds 6; cmdkey /delete:"TERMSRV/10.10.10.66" 2>&1 | Out-Null
多条命令用
;连接,一行粘贴即可完成连接。
故障排查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| mstsc 弹出密码输入框 | 凭据未写入或 key 不匹配 | 检查 IP/端口是否与 TERMSRV/ 后的值一致 |
| 连接后立刻断开 | 延时过短,凭据在连接建立前被清理 | 增大 Start-Sleep 或 timeout 的秒数 |
| 密码含特殊字符报错 | PowerShell 转义问题 | 用单引号包裹密码,如 $RdpPass = 'P@ss!#$' |
cmdkey 命令未找到 |
系统版本过低 | Windows 7 以上均支持,检查 PATH 环境变量 |
| 凭据残留未清理 | 脚本被强制终止 | 手动执行 cmdkey /delete:TERMSRV/目标IP |
相关命令
- win-rdp-setup
- win-rdp-link 👈 当前所在位置