为何相同cmdkey+mstsc命令在bat生效,PowerShell脚本却仍需输凭据?
为何相同
cmdkey+mstsc命令在BAT生效,PowerShell却失效? 核心问题:PowerShell与CMD的引号解析逻辑不同
在CMD脚本里,你写的cmdkey /generic:"Wk123"会把带双引号的"Wk123"完整传给cmdkey;但PowerShell会将外层双引号视为参数解析的边界,实际传给cmdkey的是不带引号的Wk123。
这直接导致凭据匹配失败:CMD运行后存储的凭据目标是"Wk123",PowerShell运行后存储的是Wk123,而mstsc /v:Wk123调用时会匹配CMD风格的带引号目标,自然找不到PowerShell存储的凭据,只能弹出登录对话框。
验证与修复方法
验证问题
打开系统凭据管理器,对比两种脚本运行后的凭据:
- BAT脚本运行后,凭据目标名称为
"Wk123" - PowerShell脚本运行后,凭据目标名称为
Wk123
修复方案
要让PowerShell把带引号的内容完整传给cmdkey,有两种简单方式:
- 用反引号`转义双引号:
cmdkey /generic:`"Wk123`" /user:`"myLogin`" /pass:`"myPassword`" mstsc /v:Wk123
- 用单引号包裹整个参数:
cmdkey '/generic:"Wk123"' '/user:"myLogin"' '/pass:"myPassword"' mstsc /v:Wk123
两种方式都能让cmdkey存储带引号的目标名称,与mstsc的查找逻辑匹配,实现自动登录。
额外注意点
如果用管理员权限运行PowerShell,存储的凭据会在管理员上下文隔离存储,普通用户打开的mstsc无法访问,建议用普通权限窗口运行脚本。
内容的提问来源于stack exchange,提问作者fascynacja
相关产品推荐
相关产品推荐

