Назад | Перейти на главную страницу

Сценарий LOGON не добавляет первую долю

У меня следующая проблема:

Когда я запускаю свой LOGON_SCRIPT.vbs для добавления общих сетевых ресурсов пользователям определенной группы, он пропускает первый, если пользователь является частью 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 может возвращать либо коллекцию, либо строковое значение (если пользователь является членом только одной группы в дополнение к своей основной группе):

For Each strGroup in objUser.MemberOf

Вы не можете «Для каждого» использовать objUser.MemberOf, если objUser.MemberOf является строкой.

Вероятно, это ошибка, которую вы не видите из-за следующей строки:

On Error Resume Next

(обратите внимание, что удаление этой строки из сценария, который выполняют многие пользователи, может означать, что все они начнут получать ошибки при входе в систему)

Один очень грязный способ тестирования и исправления этого - добавить пользователей, о которых идет речь, в «фиктивную» дополнительную группу. Это должно заставить значение, возвращаемое MemberOf, быть коллекцией, которую вы затем можете перечислить с помощью For Each.

Я добился успеха со сценарием, аналогичным приведенному в этом ответе: Автоматически запускать скрипт при входе в 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

Теоретически описанный выше подход может вызвать проблемы, если одно из названий вашей группы является подстрокой другого, например «финансы» и «финансы и аудит».

Существует множество других возможных подходов, включая тестирование значения, возвращаемого функцией MemberOf, чтобы определить, является ли оно строкой или массивом.

Возможная альтернатива использованию сценария входа в систему для сопоставления сетевых дисков (может потребоваться более поздняя версия сервера / клиента, чем у вас сейчас):

Удачи!