重新映射当前网络驱动器的脚本?

时间:2014-01-03 17:21:18

标签: windows batch-file vbscript scripting

我们需要使用一组在同一网络路径上运行的脚本(或应用程序)断开连接并重新映射Windows 7上的网络驱动器。

也就是说,我需要在运行之前将其自身加载到RAM中,因此它会在驱动器断开后继续运行。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

请注意16-bit apps are NOT supported in 64 bit systems(这解释了Novell实用程序失败的原因)。

如果用户断开连接,您需要在整个登录会话中运行vbs文件以重新映射驱动器。需要在域用户登录时运行此脚本 - 例如AD或GPO中的登录脚本。有很多方法可以做到。

您甚至可以通过GPOReg keynet use命令仍然有效)从资源管理器GUI中禁用“删除网络驱动器”功能。

或者您可以通过Julius为此SO question调整解决方案以满足您的需求。但是考虑一下vbs的性能影响 - 只在无限循环中检查每n分钟。

答案 1 :(得分:1)

我们做类似的事情。我们在网络上有一个批处理文件,用于映射用户需要的驱动器。我们会不时更新批处理文件,用户可以从我们放在桌面上的快捷方式运行它:

C:\WINDOWS\system32\cmd.exe /c (@echo off&if not exist \\172.x.x.x\Login (echo Unable to access server&pause) else (md c:\TMP > NUL 2>&1 &copy \\172.x.x.x\Login\MapDrives.bat C:\TMP /y > NUL 2>&1 &call C:\TMP\MapDrives.bat&del C:\TMP\MapDrives.bat&rd c:\TMP))

您可以看到它检查是否可以访问服务器,如果可以,它会创建文件夹C:\TMP,在本地复制MapDrives.bat文件,然后运行它。由于它在本地运行,因此它可以重新映射网络驱动器而不会终止自己的执行。我们可以更新服务器上的批处理文件,而无需将其推送到每个用户的计算机上。

如果您不想使用上面的长命令行创建快捷方式,则可能会在用户从服务器运行的服务器上创建第二个批处理文件(例如RunMe.bat)。您可以将快捷方式中的所有代码放在RunMe.bat中并完成相同的操作。当然,您需要再添加一行代码才能更改为本地驱动器(因此Windows无法打开网络驱动器的句柄)。像这样:

@echo off
C:
if not exist \\172.x.x.x\Login\MapDrives.bat (
  echo Unable to access server
  pause
) else (
  md c:\TMP > NUL 2>&1
  copy \\172.x.x.x1\Login\MapDrives.bat C:\TMP /y > NUL 2>&1
  C:\TMP\MapDrives.bat
)

我保留了if not exist ...,因为您可能会将RunMe.bat放在与MapDrives.bat不同的位置,因此验证用户是否可以访问该文件仍然有意义。因为我没有使用call C:\TMP\MapDrives.bat,所以它将控制转移到本地批处理文件,并且的任何句柄应该关闭,以便可以重新映射驱动器。但是,这意味着您无法在C:\TMP\MapDrives.bat命令之后放置更多命令。