我正在编写一个执行以下操作的批处理脚本:
- rasdial-连接VPN
- net use-将驱动器映射到远程文件夹共享(在 VPN 上)
- xcopy-将一堆文件从映射驱动器复制到本地计算机
- 网络使用-取消驱动器映射
- rasdial——断开 VPN
但是,它始终无法映射驱动器。它显示:
发生系统错误 67。
找不到网络名称。
如果我从命令行手动运行相同的命令序列,一切都会正常运行。有什么想法会导致它看不到新创建的网络吗?
我首先想到的是安全性,但我已经尝试了所有能想到的方法但都无济于事。
答案1
出于好奇,如果在“rasdial”和“net use”之间添加延迟,会发生什么情况——例如,“ping -n30 127.0.0.1”会添加 29 秒的暂停。我注意到 RAS 客户端(至少在 Windows XP 中)在连接建立后会花几秒钟时间处理路由表。
我不知道有任何文档描述 RAS 客户端对路由表做了什么。当我从 Windows XP 客户端连接到 RRAS 服务器时,如果未选中“在远程网络上使用默认网关”选项,则会出现以下行为:
- 到远程网络的“有类”路由被添加到路由表中
- 大约 3 - 5 秒内,该路由将被删除,并将与 RRAS 服务器具有相同子网掩码的路由添加到路由表中
勾选“在远程网络上使用默认网关”选项后,我看到以下行为:
- 到远程网络的默认网关路由已添加到路由表中
- 大约 3 - 5 秒内,具有与 RRAS 服务器相同子网掩码的路由将添加到路由表中(并且默认网关路由保持不变)
假设你使用连接管理器管理工具包您可以创建执行脚本的 RRAS 客户端条目和/或自定义路由表条目。不过,我从来没有让此功能发挥作用。
我会在“RASDIAL”完成后立即拍摄路由表的快照(route print > before.txt),然后在暂停后再次拍摄(route print > after.txt),找出哪些行发生了变化(fc before.txt after.txt)并在脚本中添加一个小循环来打印路由表,查找表示“after”条件已经发生的行,如果没有,则暂停一秒钟并循环。
虽然它有些蹩脚和陈旧,但是应该能够起作用。
顺便说一句:Windows 7 中的行为有所不同。您可以选择“禁用有类路由添加”。
RRAS 服务器的代理 ARP 特性总是让我有点不爽。我更喜欢 VPN,客户端最终会进入自己的子网,VPN 服务器会将流量路由给客户端。不过,我想我可以理解为什么微软会这样实现它。在他们的模型中,RRAS 客户端最终会作为客户端出现在与 LAN 相同的线路上,而 RRAS 服务器提供的代理 ARP“魔力”让系统管理员可以高枕无忧,不必考虑 IP 路由。