利用VBScript映射共享目录为本地磁盘

2011年4月6日 | 分类: 脚本 | 标签: , , , ,

对于加入域并用域用户登录的电脑,系统管理员可以利用域这个环境做很多事,登录脚本就是其中一个,本文将介绍如何利用VBScript来编写为域用户映射共享目录为本地磁盘的脚本。实际应用中我们可能需要对不同性质的用户映射不同的磁盘,以用户所在不同组区分为例,直接上代码:

 

Set WshNetwork = WScript.CreateObject(“WScript.Network”)
Set oMapped = CreateObject(“Scripting.Dictionary”)
oMapped.CompareMode = 1

On Error Resume Next

Set oDrives = WshNetwork.EnumNetworkDrives
For i = 0 to oDrives.Count – 1 Step 2
oMapped.Add oDrives.Item(i), oDrives.Item(i+1)
Next

If Err.Number<>0 Then Err.Clear

Const Info_Group = “cn=InfoGroup”
Set objUser = CreateObject(“ADSystemInfo”)
Set CurrentUser = GetObject(“LDAP://” & objUser.UserName)
Set oShell = CreateObject(“Shell.Application”)
strGroup = LCase(Join(CurrentUser.MemberOf))

If InStr(strGroup, lcase(Info_Group)) Then
MapDrive “X:”,”\\10.6.10.10\info”
MapDrive “Y:”,”\\10.6.10.10\公司共享”

oShell.NameSpace(“X:\”).Self.Name = “Info共享”
oShell.NameSpace(“Y:\”).Self.Name = “公司共享”
Else
MapDrive “Y:”,”\\10.6.10.10\公司共享”
oShell.NameSpace(“Y:\”).Self.Name = “公司共享”
End if

Sub MapDrive (DriveLetter, UNCPath)
On Error Resume Next
If oMapped.Exists(DriveLetter) Then
If oMapped.Item(DriveLetter) <> UNCPath Then
UnMapDrive DriveLetter
Else
Exit Sub
End If
End If
WshNetwork.MapNetworkDrive DriveLetter,UNCPath
If Err.Number <> 0 Then
PrintMessageBox “Error mapping ” & DriveLetter & ” to path ” & UNCPath
Err.Clear
Else
oMapped.Add DriveLetter,UNCPath
End If
End Sub

set WshNetwork = nothing
set oShell = Nothing
WScript.Quit

将以上脚本保存为.vbs文件,再在域组策略中添加为登录脚本,即可应用到相应OU下的用户。扩展的想一下,我们当然也就可以根据不同用户来映射不同的磁盘目录,具体可以参考如下文章:

http://www.computerperformance.co.uk/Logon/logon_group_membership.htm

注:不知为何以上代码在编辑文章时显示正常,但是发布后个别双引号变成了中文标点,请注意更正。

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。

  1. spoonwpa
    2011年4月10日11:44

    这个脚本我咋跑起来报错呢 直接copy过去 “”这个号得改成”"这个号吧 ?请求解答

  2. spoonwpa
    2011年4月10日11:44

    Set WshNetwork = WScript.CreateObject(“WScript.Network”)
      Set oMapped = CreateObject(“Scripting.Dictionary”)
      oMapped.CompareMode = 1
      On Error Resume Next
      Set oDrives = WshNetwork.EnumNetworkDrives
      For i = 0 to oDrives.Count – 1 Step 2
      oMapped.Add oDrives.Item(i), oDrives.Item(i+1)
      Next
      If Err.Number0 Then Err.Clear
      Const Info_Group = “cn=InfoGroup”
      Set objUser = CreateObject(“ADSystemInfo”)
      Set CurrentUser = GetObject(“LDAP://” & objUser.UserName)
      Set oShell = CreateObject(“Shell.Application”)
      strGroup = LCase(Join(CurrentUser.MemberOf))
      If InStr(strGroup, lcase(Info_Group)) Then
       MapDrive “X:”,”\\192.168.0.1\mis”
      
       oShell.NameSpace(“X:\”).Self.Name = “mis”
       
      
      End if
      Sub MapDrive (DriveLetter, UNCPath)
       On Error Resume Next
      If oMapped.Exists(DriveLetter) Then
      If oMapped.Item(DriveLetter) UNCPath Then
       UnMapDrive DriveLetter
       Else
       Exit Sub
      End If
      End If
      WshNetwork.MapNetworkDrive DriveLetter,UNCPath
       If Err.Number 0 Then
       PrintMessageBox “Error mapping ” & DriveLetter & ” to path ” & UNCPath
       Err.Clear
       Else
      oMapped.Add DriveLetter,UNCPath
       End If
      End Sub
      set WshNetwork = nothing
      set oShell = Nothing
      WScript.Quit

  3. 2011年4月10日11:58

    是的,不知为何以上代码在编辑文章时显示正常,但是发布后个别双引号变成了中文标点了。

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。