quarta-feira, fevereiro 15, 2006

Windows 2003, CurrentUser.MemberOf e Type Mismatch Error

Problema:

Ao executar o trecho de código abaixo, o WSH retorna um erro na linha 3:

#1: Set ADSysInfo = CreateObject("ADSystemInfo")
#2: Set CurrentUser = GetObject("LDAP://" & ADSysInfo.UserName)
#3: strGroups = LCase(CurrentUser.MemberOf)

Causa:

O erro que geralmente ocorre é do tipo Type Mismatch. Isto acontece quando o retorno de .MemberOf é composto de mais de um item, ou seja, se o usuário pertencer a um grupo somente, o método retorna uma string, se não, ele retorna um Array do tipo Variant().

Solução:

A melhor forma de resolver este problema é testar se o retorno de .MemberOf é um Array, utilizando a função IsArray, como no exemplo abaixo:

If IsArray(CurrentUser.MemberOf) Then
Dim arrMemberOf

arrMemberOf = CurrentUser.MemberOf

For i = 0 To UBound(arrMemberOf)
strGroups = strGroups & ";" & LCase(arrMemberOf(i)) & ";"
Next

Else
strGroups = LCase(CurrentUser.MemberOf)
End If