LOGON脚本不会添加第一个共享

我有以下问题:

当我运行我的LOGON_SCRIPT.vbs将networking共享添加到特定组的用户时,它跳过第一个,如果用户是Kleinkunstig_Users(它不会添加第一个共享)的一部分。 但是,如果我添加另一个组,它将添加第一个和另一个的份额。 请帮忙? (脚本在下面)

'start script On Error Resume Next Set objSysInfo = CreateObject("ADSystemInfo") Set objNetwork = CreateObject("Wscript.Network") 'find user name strUserPath = "LDAP://" & objSysInfo.UserName Set objUser = GetObject(strUserPath) 'find user group's For Each strGroup in objUser.MemberOf strGroupPath = "LDAP://" & strGroup Set objGroup = GetObject(strGroupPath) strGroupName = objGroup.CN ' if user member of a group then map network drive Select Case strGroupName ' Case "Kleinkunstig_Users" objNetwork.MapNetworkDrive "Y:", "\\KL01\Kleinkunstig" Case "Kleinkunstig_Sales" objNetwork.MapNetworkDrive "V:", "\\KL01\Sales" Case "Kleinkunstig_Marketing" objNetwork.MapNetworkDrive "M:", "\\KL01\Marketing" Case "Kleinkunstig_Maanagement" objNetwork.MapNetworkDrive "X:", "\\KL01\Management" Case "Kleinkunstig_IT" objNetwork.MapNetworkDrive "I:", "\\KL01\IT" Case "Kleinkunstig_Financial" objNetwork.MapNetworkDrive "O:", "\\KL01\Financial" Case "Kleinkunstig_Administrator" objNetwork.MapNetworkDrive "Q:", "\\KL01\Administrators" ' End Select Next 'end script 

在下面的代码中,MemberOf可能返回一个集合或一个string值(如果用户除了主要组以外只有一个组的成员):

 For Each strGroup in objUser.MemberOf 

如果objUser.MemberOf是一个string,则不能通过objUser.MemberOf“For Each”。

有可能是由于下面的一行你没有看到一个错误:

 On Error Resume Next 

(注意,从许多用户正在执行的脚本中删除该行可能意味着它们都在login时开始接收错误)

testing和解决这个问题的一个非常肮脏的方法是将有问题的用户添加到“虚拟”附加组。 这应该强制将MemberOf返回的值作为一个集合,然后您可以使用For Each进行枚举。

我已经成功了一个类似于这个答案的脚本:当我login到Windows时自动运行一个脚本 ,在这里引用:

 Const ENGINEERING_GROUP = "cn=engineering" Const FINANCE_GROUP = "cn=finance" Const HUMAN_RESOURCES_GROUP = "cn=human resources" Set wshNetwork = CreateObject("WScript.Network") wshNetwork.MapNetworkDrive "h:", "\\FileServer\Users\" & wshNetwork.UserName Set ADSysInfo = CreateObject("ADSystemInfo") Set CurrentUser = GetObject("LDAP://" & ADSysInfo.UserName) strGroups = LCase(Join(CurrentUser.MemberOf)) If InStr(strGroups, ENGINEERING_GROUP) Then wshNetwork.MapNetworkDrive "g:", "\\FileServer\Engineering\" wshNetwork.AddWindowsPrinterConnection "\\PrintServer\EngLaser" wshNetwork.AddWindowsPrinterConnection "\\PrintServer\Plotter" wshNetWork.SetDefaultPrinter "\\PrintServer\EngLaser" ElseIf InStr(strGroups, FINANCE_GROUP) Then wshNetwork.MapNetworkDrive "g:", "\\FileServer\Finance\" wshNetwork.AddWindowsPrinterConnection "\\PrintServer\FinLaser" wshNetWork.SetDefaultPrinter "\\PrintServer\FinLaser" ElseIf InStr(strGroups, HUMAN_RESOURCES_GROUP) Then wshNetwork.MapNetworkDrive "g:", "\\FileServer\Human Resources\" wshNetwork.AddWindowsPrinterConnection "\\PrintServer\HrLaser" wshNetWork.SetDefaultPrinter "\\PrintServer\HrLaser" End If 

从理论上讲,如果你的一个组名是另一个的子串,如“财务”和“财务与审计”,上述方法可能会引起问题。

还有其他一些可能的方法,包括testingMemberOf返回的值来确定它是string还是数组。

使用login脚本映射networking驱动器的可能替代方法(可能需要比目前更新的服务器/客户端版本):

  • configuration一个映射的驱动器项目
  • 使用组策略首选项来映射基于组成员身份的驱动器

祝你好运!