|
server
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Listing all Groups in domain and their MemberOf, list MemberOf's MemberOf.
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 Does this link help?
http://www.rlmueller.net/Document%20Domain%20Groups.htm 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 >
Other interesting topics
|
|||||||||||||||||||||||