我们需要使用一组在同一网络路径上运行的脚本(或应用程序)断开连接并重新映射Windows 7上的网络驱动器。
也就是说,我需要在运行之前将其自身加载到RAM中,因此它会在驱动器断开后继续运行。
有什么想法吗?
答案 0 :(得分:1)
请注意16-bit apps are NOT supported in 64 bit systems(这解释了Novell实用程序失败的原因)。
如果用户断开连接,您需要在整个登录会话中运行vbs文件以重新映射驱动器。需要在域用户登录时运行此脚本 - 例如AD或GPO中的登录脚本。有很多方法可以做到。
您甚至可以通过GPO或Reg key(net 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 © \\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
命令之后放置更多命令。