您的位置:首页 > 理论基础 > 计算机网络

技术QA:如何通过组策略映射网络驱动器并实现更名? 推荐

2010-08-28 22:45 363 查看
引子:

最新在做一个AD的项目,客户老卢大哥是一个非常认真负责的人,做事非常严谨。项目中要规划部署一台文件服务器,并通过组策略给用户映射网络驱动器。如下图所示:



网络驱动器映射完成之后,老卢大哥认为这个驱动器名称很长,既不好看也不方便用户使用,希望映射后能够直接更名,达到如下图所示的效果:



既然老卢大哥有了要求,那小弟当然要完成啦。说干就干,先到百度上搜了一下,不一会就找到了如下这篇文章:
有谁知道如何在命令行下给网络映射的驱动器改名呀?
http://bbs.winos.cn/viewthread.php?tid=70471
3楼的牛人就给了一个角本,如下所示:





把角本下载了下来,打开一看,这个角本还是蛮强大的网络驱动器映射角本,按照自已的要求修改后,首次运行成功,但在后面测试中就报错了,如下图所示:




经研究发现,如果客户端先前已经映射过网络驱动器,并且跟角本中映射的网络驱动器盘符不一致,就会报上图所示的错误。如果网络驱动器盘符一致,则运行正常,如下图所示:




研究了半天角本,未果。看来只能转换思路才行,想到可以在角本处理前,可先把原有客户终端用户的网络驱动器映射删除不就解决了这个问题吗?于是又拿出法宝--百度,又一篇文章就出来了哈,如下所示:
如何删除所有的网络驱动器和指定的网络驱动器?
http://bbs.winos.cn/thread-21016-1-1.html
神奇,又是WinOS 3楼的牛人给出了一个角本,如下图所示:




编辑成角本后测试,发现正是自己要找的东东。
然后工作就是把两个角本合并,测试、修改、测试,反复几次后,最终得到了一个还算是完美的结果。美中不足的就是,客户终端用户自己映射的网络驱动器,每次用户登录角本一执行就会被删除。
世上没有完美事物,其实或许,这个问题本身就不是问题。首先,我们要实现集中管理和桌面标准化,也不应允许客户终端用户随便去映射网络驱动器;再次,客户终端用户经常使用的共享文件夹,我们都已经帮他们映射好了网络驱动器,如果以后发现确实有需要但是在角本没有映射的,我们帮他加上不就好了。对,那就先这么着吧,希望老卢大哥能够满意。以后有时间话再去研究研究吧,必竟编写角本并不是自己所擅长的事情。

Q:
如何通过组策略映射网络驱动器并实现更名?

A:
最终的角本如下所示:

'第一部分:删除所有映射网络驱动器

Set objNet = CreateObject("Wscript.Network")
Set objNetdrv = objnet.EnumNetworkDrives
'删除所有映射网络驱动器
For i = 0 to objNetdrv.Count - 1 Step 2
objnet.RemoveNetworkDrive objNetdrv.Item(i),True,True
Next

'第二部分:等待第一部分删除所有映射网络驱动器完成,约1秒钟

WScript.Sleep 1000

'第三部分:映射并重命名网络驱动器

' 映射过程 映射路径 映射盘符名 新的映射名称

Private Function NetworkDrivesName(NetworkPath, DrivesName, NewNetworkName)
Set objNetwork = CreateObject("Wscript.Network")
Set objShell = CreateObject("Shell.Application")
Set colDrives = objNetwork.EnumNetworkDrives

'映射网络驱动器
objNetwork.MapNetworkDrive DrivesName, NetworkPath

'重新命名
objShell.NameSpace(DrivesName).Self.Name = NewNetworkName

End Function

NetworkDrivesName "\\server\CorpFS","z:","公司文件夹"
NetworkDrivesName "\\Server\Contoso","y:","Test文件夹"

备注:

非常感谢Hack38反馈,该角本于2010年9月2日更正并更新日志。(红色字体为日志更新的内容)
非常感谢Hack38反馈,2010年9月3日,日志更新。(蓝色字体为日志更新的内容)

问题的原因:
在“第一部分删除所有映射网络驱动器”这个循环还没有执行完成的时候,执行了“第二部分(现第三部分)映射并重命名网络驱动器”,导致角本执行异常。
解决方案:
在角本中添加了“第二部分:等待第一部分删除所有映射网络驱动器完成”,利用 WScript 对象中的 Sleep 方法,将角本执行挂起,等待1秒钟,确保“第一部分”执行完成后,再继续执行“第三部分”。
备注:可以根据公司具体情况调整 WScript.Sleep 参数。例如将参数修改为:WScript.Sleep 10000,将角本挂起等待10秒钟。
备用解决方案:
可以将这个角本分为两个,“第一部分”为关机角本,“第三部分”为开机角本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息