Home All Groups Group Topic Archive Search About

Listing all Groups in domain and their MemberOf, list MemberOf's MemberOf.



Author
24 Oct 2007 5:26 PM
Chris
Hello,

So far I am able to query each group in the domain output the groups
they are a memberOf. What I would like to do is also query those
memberOfs output their memberOfs, doing the same for any future
memberOfs found etc...

Any suggestions?


'Active Directory User Dump
'This script will output every Domain Group & each group they are a
member of.
'Script runs in the background and will save an excel spreadsheet when
it's completed
'to C:\Scripts\common\ALL_Groups_1024.xls
'Chris

Option Explicit
On Error Resume Next

Dim objRootDSE, strDNSDomain, adoConnection, adoCommand
Dim strBase, strFilter, strAttributes, strQuery, adoRecordset
Dim strName, arrMemberOf, strGroup
Dim objExcel, strFileName, objWorksheet, intRow
dim strDes, strNot
Dim strCan, strGtype

strFileName = "c:\Scripts\common\ALL_Groups_1024.xls"

Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Add
Set objWorksheet = objExcel.ActiveWorkbook.Worksheets(1)

'Determine DNS domain name.
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")

'Use ADO to search Active Directory.
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"

Set adoCommand = CreateObject("ADODB.Command")
adoCommand.ActiveConnection = adoConnection

'Search entire domain.
strBase = "<LDAP://" & strDNSDomain & ">"

'Search for all groups.
strFilter = "(objectClass=group)"

'Comma delimited list of attribute values to retrieve.
strAttributes = "cn,description,info,memberOf,groupType"

'Construct the LDAP query.
strQuery = strBase & ";" & strFilter & ";" & strAttributes &
";subtree"

'Run the query.
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute

objWorksheet.Cells(1, 1).Value = "GroupCN"
objWorksheet.Cells(1, 2).Value = "Description"
objWorksheet.Cells(1, 3).Value = "Notes"
objWorksheet.Cells(1, 4).Value = "groupType"
objWorksheet.Cells(1, 5).Value = "MemberOf"

intRow = 2
Do Until adoRecordset.EOF
        strName = adoRecordset.Fields("cn").Value
        strDes = adoRecordset.Fields("description").Value
        strNot = adoRecordset.Fields("info").Value
        arrMemberOf = adoRecordset.Fields("memberOf").Value
        objWorksheet.Cells(intRow, 1).Value = strName
        objWorksheet.Cells(intRow, 2).Value = strDes
        objWorksheet.Cells(intRow, 3).Value = strNot

        If adoRecordset.Fields("groupType").Value = 2 Then
            strGtype = "global distribution group"
            objWorksheet.Cells(intRow, 4).Value = "global distribution group"
        Elseif adoRecordset.Fields("groupType").Value = 4 Then
            strGtype = "domain local distribution group"
            objWorksheet.Cells(intRow, 4).Value = "domain local distribution
group"
        Elseif adoRecordset.Fields("groupType").Value = 8 Then
            strGtype = "universal distribution group"
            objWorksheet.Cells(intRow, 4).Value = "universal distribution
group"
        Elseif adoRecordset.Fields("groupType").Value = -2147483646 Then
            strGtype = "global security group"
            objWorksheet.Cells(intRow, 4).Value = "global security group"
        Elseif adoRecordset.Fields("groupType").Value = -2147483644 Then
            strGtype = "global distribution group"
            objWorksheet.Cells(intRow, 4).Value = "domain local security group"
        Elseif adoRecordset.Fields("groupType").Value = -2147483640 Then
            strGtype = "global distribution group"
            objWorksheet.Cells(intRow, 4).Value = "universal security group"
        End If

    If IsNull(arrMemberOf) Then
        intRow = intRow + 1
    Else
        For Each strGroup in arrMemberOf
            objWorksheet.Cells(intRow, 1).Value = strName
            objWorksheet.Cells(intRow, 2).Value = strDes
            objWorksheet.Cells(intRow, 3).Value = strNot
            objWorksheet.Cells(intRow, 4).Value = strGtype
            objWorksheet.Cells(intRow, 5).Value = strGroup
                set

            intRow = intRow + 1
        Next
    End If
    adoRecordset.MoveNext
Loop

objExcel.ActiveWorkbook.SaveAs strFileName
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
adoRecordset.Close
adoConnection.Close

Author
25 Oct 2007 11:40 AM
Richard Mueller [MVP]
Does this link help?

http://www.rlmueller.net/Document%20Domain%20Groups.htm

--
Richard Mueller
Microsoft MVP Scripting and ADSI
Hilltop Lab - http://www.rlmueller.net
--

Show quote
"Chris" <stealt***@gmail.com> wrote in message
news:1193246804.497702.264780@v29g2000prd.googlegroups.com...
> Hello,
>
> So far I am able to query each group in the domain output the groups
> they are a memberOf. What I would like to do is also query those
> memberOfs output their memberOfs, doing the same for any future
> memberOfs found etc...
>
> Any suggestions?
>
>
> 'Active Directory User Dump
> 'This script will output every Domain Group & each group they are a
> member of.
> 'Script runs in the background and will save an excel spreadsheet when
> it's completed
> 'to C:\Scripts\common\ALL_Groups_1024.xls
> 'Chris
>
> Option Explicit
> On Error Resume Next
>
> Dim objRootDSE, strDNSDomain, adoConnection, adoCommand
> Dim strBase, strFilter, strAttributes, strQuery, adoRecordset
> Dim strName, arrMemberOf, strGroup
> Dim objExcel, strFileName, objWorksheet, intRow
> dim strDes, strNot
> Dim strCan, strGtype
>
> strFileName = "c:\Scripts\common\ALL_Groups_1024.xls"
>
> Set objExcel = CreateObject("Excel.Application")
> objExcel.Workbooks.Add
> Set objWorksheet = objExcel.ActiveWorkbook.Worksheets(1)
>
> 'Determine DNS domain name.
> Set objRootDSE = GetObject("LDAP://RootDSE")
> strDNSDomain = objRootDSE.Get("defaultNamingContext")
>
> 'Use ADO to search Active Directory.
> Set adoConnection = CreateObject("ADODB.Connection")
> adoConnection.Provider = "ADsDSOObject"
> adoConnection.Open "Active Directory Provider"
>
> Set adoCommand = CreateObject("ADODB.Command")
> adoCommand.ActiveConnection = adoConnection
>
> 'Search entire domain.
> strBase = "<LDAP://" & strDNSDomain & ">"
>
> 'Search for all groups.
> strFilter = "(objectClass=group)"
>
> 'Comma delimited list of attribute values to retrieve.
> strAttributes = "cn,description,info,memberOf,groupType"
>
> 'Construct the LDAP query.
> strQuery = strBase & ";" & strFilter & ";" & strAttributes &
> ";subtree"
>
> 'Run the query.
> adoCommand.CommandText = strQuery
> adoCommand.Properties("Page Size") = 100
> adoCommand.Properties("Timeout") = 30
> adoCommand.Properties("Cache Results") = False
> Set adoRecordset = adoCommand.Execute
>
> objWorksheet.Cells(1, 1).Value = "GroupCN"
> objWorksheet.Cells(1, 2).Value = "Description"
> objWorksheet.Cells(1, 3).Value = "Notes"
> objWorksheet.Cells(1, 4).Value = "groupType"
> objWorksheet.Cells(1, 5).Value = "MemberOf"
>
> intRow = 2
> Do Until adoRecordset.EOF
> strName = adoRecordset.Fields("cn").Value
> strDes = adoRecordset.Fields("description").Value
> strNot = adoRecordset.Fields("info").Value
> arrMemberOf = adoRecordset.Fields("memberOf").Value
> objWorksheet.Cells(intRow, 1).Value = strName
> objWorksheet.Cells(intRow, 2).Value = strDes
> objWorksheet.Cells(intRow, 3).Value = strNot
>
> If adoRecordset.Fields("groupType").Value = 2 Then
> strGtype = "global distribution group"
> objWorksheet.Cells(intRow, 4).Value = "global distribution group"
> Elseif adoRecordset.Fields("groupType").Value = 4 Then
> strGtype = "domain local distribution group"
> objWorksheet.Cells(intRow, 4).Value = "domain local distribution
> group"
> Elseif adoRecordset.Fields("groupType").Value = 8 Then
> strGtype = "universal distribution group"
> objWorksheet.Cells(intRow, 4).Value = "universal distribution
> group"
> Elseif adoRecordset.Fields("groupType").Value = -2147483646 Then
> strGtype = "global security group"
> objWorksheet.Cells(intRow, 4).Value = "global security group"
> Elseif adoRecordset.Fields("groupType").Value = -2147483644 Then
> strGtype = "global distribution group"
> objWorksheet.Cells(intRow, 4).Value = "domain local security group"
> Elseif adoRecordset.Fields("groupType").Value = -2147483640 Then
> strGtype = "global distribution group"
> objWorksheet.Cells(intRow, 4).Value = "universal security group"
> End If
>
> If IsNull(arrMemberOf) Then
> intRow = intRow + 1
> Else
> For Each strGroup in arrMemberOf
> objWorksheet.Cells(intRow, 1).Value = strName
> objWorksheet.Cells(intRow, 2).Value = strDes
> objWorksheet.Cells(intRow, 3).Value = strNot
> objWorksheet.Cells(intRow, 4).Value = strGtype
> objWorksheet.Cells(intRow, 5).Value = strGroup
> set
>
> intRow = intRow + 1
> Next
> End If
> adoRecordset.MoveNext
> Loop
>
> objExcel.ActiveWorkbook.SaveAs strFileName
> objExcel.ActiveWorkbook.Close
> objExcel.Application.Quit
> adoRecordset.Close
> adoConnection.Close
>

AddThis Social Bookmark Button