So in one of the environments, I am working in. There are alot of one off security groups that are undocumented in Active Directory that needs to be moved to a centralized database.

I used the following code to run through AD, Find users that have the same Dept and Job title information via the wwwHomepage attribute and compile a report to get the departments eyes on them for adding the documentation for the reasoning these groups are being added.

Should the Dept and Jobcode combination be ultimately stored in the wwwHomepage freetext field. The answer would be no but that is the way it is right now.

Dim Data As New Dictionary(Of String, Dictionary(Of String, Integer))
Dim DataSecurityCount As New Dictionary(Of String, Integer)
Dim DeptJobcode As New Dictionary(Of String, Integer)
Dim DeptJobcodeSecurityGroup As New Dictionary(Of String, Integer)
Private Sub LoadSecuritryGroupReport()
Dim enTry As System.DirectoryServices.DirectoryEntry = New System.DirectoryServices.DirectoryEntry(“LDAP://Domain.Com/DC=info,DC=sys”)
Dim mySearcher As System.DirectoryServices.DirectorySearcher = New System.DirectoryServices.DirectorySearcher(enTry)
mySearcher.Filter = “(objectCategory=person)” ‘Environment.UserName Environment.MachineName
mySearcher.PageSize = 10000
mySearcher.SizeLimit = 10000
Dim FindAll As SearchResultCollection = mySearcher.FindAll
If IsNothing(FindAll) Then
Debug.WriteLine(“Did not find user account”)
Exit Sub
End If

Dim I As Integer = 0

Dim searchResult As SearchResult
For Each searchResult In FindAll
I += 1
If searchResult.Properties.Contains(“wwwHomePage”) Then

If DeptJobcode.ContainsKey(searchResult.Properties(“wwwHomePage”)(0)) Then
DeptJobcode(searchResult.Properties(“wwwHomePage”)(0)) += 1
DeptJobcode.Add(searchResult.Properties(“wwwHomePage”)(0), 1)
End If

If Data.ContainsKey(searchResult.Properties(“wwwHomePage”)(0)) Then
For Each MyGroup In searchResult.Properties(“memberof”)
If Data(searchResult.Properties(“wwwHomePage”)(0)).ContainsKey(MyGroup) Then
Data(searchResult.Properties(“wwwHomePage”)(0))(MyGroup) += 1
Data(searchResult.Properties(“wwwHomePage”)(0)).Add(MyGroup, 1)
End If
Dim MyNewDictionary As New Dictionary(Of String, Integer)
For Each MyGroup In searchResult.Properties(“memberof”)
MyNewDictionary.Add(MyGroup, 1)

Data.Add(searchResult.Properties(“wwwHomePage”)(0), MyNewDictionary)
End If

End If
‘End If

For I = 2000 To 5 Step -1
For Each MyDict In DeptJobcode
If MyDict.Value = I Then
Debug.WriteLine(MyDict.Key & ” – ” & MyDict.Value)
For Each MyValue In Data(MyDict.Key)
For Ii = 2000 To 5 Step -1
If MyValue.Value = Ii Then
Debug.WriteLine(vbTab & MyValue.Key & ” ” & MyValue.Value)
End If
End If

Debug.WriteLine(I & ” accounts are active”)
End Sub

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    Markdown is turned off in code blocks:
     [This is not a link](

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see