Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 5928
  • Last Modified:

VB LDAP to get a users "member of" groups, within AD

HI all,
im working on a script and part of it is to find out the total number of groups a user is a member of, what that group is and what the descript of that group is.

I can count the groups (foundPerm) and also write these groups to an array (arrNames), however i have the following 2 questions:
1) is there a quicker way to do this?
2) How do i get a list in another array (arrNames1), which shows the groups description?

Thanks
''    Const ADS_SCOPE_SUBTREE = 2
''        objConnection.Provider = "ADsDSOObject"
''        objConnection.Open "Active Directory Provider"
''    Set objCommand.ActiveConnection = objConnection
''        objCommand.Properties("Page Size") = 1000
''        objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
''    On Error Resume Next
''    Set oRoot = GetObject("LDAP://RootDSE")
''    strDomain = oRoot.Get("DefaultNamingContext")
    
''    objCommand.CommandText = _
''        "SELECT distinguishedName FROM 'LDAP://" & strDomain & "' WHERE objectCategory='user' " & _
''        "AND cn='" & userGBID & "'"
''
''    Set objRecordset = objCommand.Execute
''
''    objRecordset.MoveFirst
''        Do Until objRecordset.EOF
''            result = (objRecordset.Fields("distinguishedName").Value)
''            objRecordset.MoveNext
''        Loop
''
''    Result4 = Right(result, (Len(result)) - (InStr(1, result, ",")))
''
''    strUserName = "Cn=" & userGBID & ", " & Result4 & ""
''    strUserPath = "LDAP://" & strUserName
''    Set objUser = GetObject(strUserPath)
''    intsize = 0
''    foundPerm = 0
''    For Each strGroup In objUser.memberof
''        foundPerm = foundPerm + 1 '<---- number of groups a user is member of
''        strGroupPath = "LDAP://" & strGroup
''        ReDim Preserve arrNames(intsize)
''        Set objGroup = GetObject(strGroupPath)
''        strGroup = Split(strGroup, ",OU=")
''        strGroup = Split(strGroup(0), "CN=")
''        arrNames(intsize) = Trim(strGroup(1)) '<--- array where these groups are saved
''        'arrDescription (intsize)
''        intsize = intsize + 1
''    Next
''    intRow = 1

Open in new window

0
jamiepryer
Asked:
jamiepryer
1 Solution
 
RobSampsonCommented:
Hi, here's a completely different approach.....

Regards,

Rob.
If LCase(Right(Wscript.FullName, 11)) = "wscript.exe" Then
    strPath = Wscript.ScriptFullName
    strCommand = "%comspec% /k cscript  """ & strPath & """"
    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run(strCommand), 1, True
    Wscript.Quit
End If
 
Const ADS_SCOPE_SUBTREE = 2
 
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
 
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
 
Set objRootDSE = GetObject("LDAP://RootDSE")
strDomain = objRootDSE.get("defaultNamingContext")
 
objCommand.CommandText = _
    "SELECT distinguishedName FROM 'LDAP://" & strDomain & "' WHERE objectCategory='user' AND objectClass='person'"
Set objRecordSet = objCommand.Execute
 
strResults = """distinguishedName"",""Group name"",""Group Description"""
 
If Not objRecordSet.EOF Then
	objRecordSet.MoveFirst
	Do Until objRecordSet.EOF
		WScript.Echo "Enumerating " & objRecordSet.Fields("distinguishedName").Value
		Set objUser = GetObject("LDAP://" & objRecordSet.Fields("distinguishedName").Value)
		Set colGroups = objUser.Groups
		strResults = strResults & VbCrLf & """" & objUser.distinguishedName & """"
		For Each objGroup In colGroups
			strGroupName = objGroup.CN
			strDescription = objGroup.Description
			strResults = strResults & VbCrLf & """"",""" & strGroupName & """,""" & strDescription & """"
		Next
		objRecordSet.MoveNext
	Loop
End If
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = objFSO.CreateTextFile("Results.csv", True)
objOutputFile.Write strResults
objOutputFile.Close
MsgBox "Done"

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now