No código a seguir, MemberOf pode retornar uma coleta ou um valor de sequência (se o usuário for membro de apenas um grupo além do grupo principal):
For Each strGroup in objUser.MemberOf
Você não pode "For Each" sobre objUser.MemberOf se objUser.MemberOf for uma string.
Provavelmente, há um erro que você não está vendo devido à seguinte linha:
On Error Resume Next
(note que remover essa linha de um script que muitos usuários estão executando pode significar que todos começam a receber erros no login)
Uma maneira muito ruim de testar e corrigir isso é adicionar os usuários em questão a um grupo adicional "fictício". Isso deve forçar o valor retornado por MemberOf para ser uma coleção que você pode, em seguida, enumerar com For Each.
Eu tive sucesso com um script semelhante ao da resposta: Executar automaticamente um script quando eu faço logon no Windows , citado aqui:
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
Em teoria, a abordagem acima pode causar problemas se um dos nomes de seu grupo for uma subcadeia de outro, como "finanças" e "finanças e auditoria".
Existem inúmeras outras abordagens possíveis, incluindo testar o valor retornado por MemberOf para determinar se é uma string ou uma matriz.
Possível alternativa ao uso de um script de login para mapear unidades de rede (pode exigir versões de servidor / cliente mais recentes do que você possui atualmente):
- Configurar um item de unidade mapeada
- Usando as preferências de diretiva de grupo para mapear unidades com base no grupo Filiação
Boa sorte!