rasdial 错误 623:先创建 VPN 配置文件
错误 623 表示拨号程序在电话簿中找不到任何条目。请用 Add-VpnConnection 创建配置文件,然后让会话、电话簿路径和自动触发器保持一致。
rasdial 返回的错误 623 是查找失败,而不是网络故障:电话簿里没有该名称的条目。Windows 要求配置文件在任何命令拨号之前就已存在,而拨号程序从不自行创建。请按顺序完成下面的检查,因为每一项都假定前一项已通过。
先读错误码,再做别的事
623 之后的代码描述的是其他故障,因此你看到的第一段文字决定该走哪个分支。691 是针对确实存在的配置文件拒绝凭据,868 通常指向服务器地址的名称解析。只有 623 会把你送回创建配置文件这一步,所以重复同一条命令很少能改变什么。
在拨号的那一步就记录退出状态。脚本里的下一条命令会覆盖它,等有人去读日志时真正的代码已经不见了。
rasdial "Office"; if ($LASTEXITCODE -ne 0) { Write-Output "failed: $LASTEXITCODE" }确认电话簿条目存在
在再添加一个之前,先问 Windows 究竟有哪些配置文件。该 cmdlet 会返回名称、服务器地址和当前连接状态,结果为空就能立刻回答问题。
Windows 把每个用户的条目放在一个电话簿文件里,把所有用户的条目放在另一个文件里,所以同一个名称可能指向两台不同的服务器。这种重复正是脚本拨到错误端点、而你检查过的设置看起来完全正确的原因。在对名称下结论之前,把两个位置都列出来。
Get-VpnConnection -Name "Office" | Format-List Name, ServerAddress, ConnectionStatus
dir "%APPDATA%\Microsoft\Network\Connections\Pbk"
dir "%PROGRAMDATA%\Microsoft\Network\Connections\Pbk"用 Add-VpnConnection 创建配置文件
用写入本机配置文件的 cmdlet 创建一次条目,不要手工编辑文本。要提供服务器地址、隧道类型以及网关真正接受的认证方式,因为协商了错误协议的配置文件之后会失败,并给出把责任推给服务器的消息。
你仍然可以手工把连接段粘贴进 rasphone.pbk,但没有任何东西会校验这次编辑。一个键写错就会得到无法通过任何认证的配置文件,而它产生的错误看起来像远端故障,而不是拼写错误。
Add-VpnConnection -Name "Office" -ServerAddress vpn.corp.internal \
-TunnelType Ikev2 -AuthenticationMethod Eap -EncryptionLevel Required让会话与凭据存储保持一致
条目属于某个用户或属于本机,它背后的证书或保存的凭据也许只能在某一次登录会话中访问。以 SYSTEM 身份运行的计划任务与登录的账户是不同的客户端,会话 0 中的服务也没有可用于显示提示的桌面。交互式会话第一次遇到陌生网络时,Windows 会打开网络位置提示,而拨号程序没有开关可以把它静音。会话隔离避开了那个提示,同时也移除了某些认证方式所需的用户上下文。
要有意识地选择所有者:按用户隧道就用登录时触发的任务,整机隧道就用服务。把两者混在一起又期待相同行为,正是手工能用的连接在自动化下开始失败的原因。
把自动触发器恢复成你看到的样子
当某个应用程序或网络条件匹配时,Windows 可以自行升起隧道,而一次断开可能把该配置文件加入已禁用的自动触发器条目列表。下一次自动尝试就再也不会发生,而那要等到负责的脚本退出很久之后。因此无条件断开的任务会破坏该机器上其他所有用户的始终在线行为。这个副作用在任务日志里看不见,也正是它代价高昂的原因。
在任务运行之前记录配置文件状态,并把它恢复成你发现的样子,而不是默认拆掉隧道。重新启用触发器属于策略变更,所以应当把它当作有意的步骤,而不是清理。
无论写多少脚本,都有两个限制依然存在。隧道后面的服务仍不可达时,rasdial 也可能报告成功,所以要测试你真正需要的资源。要求智能卡、推送批准或浏览器登录的配置文件没有无人值守的路径,人类所有者仍是设计的一部分。