批量保存远程计算机本地账户RDP凭证脚本问题求助
解决RDP自动登录本地账户识别问题
嘿,我来帮你搞定这个远程服务器自动登录的问题~你遇到的核心痛点是:RDP连接远程本地账户时,必须明确指定「目标机器的标识(IP/计算机名)+ 本地用户名」,格式是目标标识\用户名,原来脚本里的%%hostname\user应该是没正确匹配到对应IP的机器名,所以才导致识别失败。
下面给你两种实用方案,按需选择:
方案一:直接用IP作为账户前缀(无需新增文件)
其实不用额外维护计算机名文件,当你通过IP连接时,直接用[IP地址]\本地用户名就能被RDP正确识别。修改你的脚本即可:
@echo off :: 遍历IPs.txt里的所有服务器IP for /f %%i in (IPs.txt) do ( :: 添加凭据,用IP作为本地账户的前缀 cmdkey /generic:"%%i" /user:"%%i\你的本地用户名" /pass:"你的密码" :: 启动RDP连接 mstsc /v:%%i )
这种方式最简单,不需要额外维护文件,适合大多数场景。
方案二:使用计算机名前缀(需关联IP和计算机名)
如果你的场景必须用计算机名作为前缀,那可以手动维护一个包含IP和对应计算机名的列表文件,或者通过DNS反向解析自动获取:
子方案1:手动维护IP-计算机名列表
- 创建
ServerList.txt,每行格式为「IP地址 计算机名」(用空格分隔),示例内容:
192.168.1.100 Server01 192.168.1.101 Server02
- 编写批处理脚本,同时读取IP和计算机名:
@echo off :: 遍历ServerList.txt,tokens=1,2表示拆分每行的两个字段 for /f "tokens=1,2" %%i in (ServerList.txt) do ( :: %%i是IP,%%j是对应的计算机名 cmdkey /generic:"%%i" /user:"%%j\你的本地用户名" /pass:"你的密码" mstsc /v:%%i )
这种方式最稳定,不会受网络DNS的影响。
子方案2:自动反向解析IP获取计算机名
如果你的网络DNS配置正确,能通过IP反向解析出计算机名,可以用nslookup命令自动获取,脚本需要启用延迟变量扩展:
@echo off setlocal enabledelayedexpansion for /f %%i in (IPs.txt) do ( :: 反向解析IP获取计算机名,跳过无用行,提取Name字段值 for /f "skip=1 tokens=2" %%j in ('nslookup %%i ^| findstr /i "Name:"') do ( set "hostname=%%j" :: 如果计算机名带域名后缀(比如Server01.domain.com),只保留前面的计算机名 for /f "delims=." %%k in ("!hostname!") do set "hostname=%%k" cmdkey /generic:"%%i" /user:"!hostname!\你的本地用户名" /pass:"你的密码" mstsc /v:%%i ) ) endlocal
注意:如果DNS解析不到目标机器的计算机名,这个脚本会失效,所以只适合DNS环境完善的场景。
内容的提问来源于stack exchange,提问作者dwb
相关产品推荐
相关产品推荐

