'==========================================================================
'
' NAME: EnumGroupMembersToExcelWithSort.vbs
'
' AUTHOR: Mark D. MacLachlan , The Spider's Parlor
' URL: [URL unfurl="true"]http://www.TheSpidersParlor.com[/URL]
' COPYRIGHT (c) 2006 All Rights Reserved
' DATE : 7/24/2006
'
' COMMENT:
'
'
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED To
' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
' PARTICULAR PURPOSE.
'
' IN NO EVENT SHALL THE SPIDER'S PARLOR AND/OR ITS RESPECTIVE SUPPLIERS
' BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
' DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
' WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
' ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
' OF THIS CODE OR INFORMATION.
'
'==========================================================================
'On Error Resume Next
Dim x, xRow, xTab
Dim oRootDSE, oConnection, objCommand, ldstring, oRecordset, GCounter
Const xlAscending = 1
Const xlYes = 1
Const xlDescending = 2
Set x = CreateObject("excel.application")
x.Visible = true
Set newBook = x.Workbooks.Add
newBook.Worksheets(1).Activate
Set oRootDSE = GetObject("LDAP://rootDSE")
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = oConnection
ldstring = "<LDAP://" & oRootDSE.get("defaultNamingContext") & ">;"
objCommand.CommandText=ldstring & "(objectClass=group);name,distinguishedName"
Set oRecordSet = objCommand.Execute()
GCounter = 1
SheetCounter = 0
Do While Not oRecordSet.EOF
'Account for the original 3 worksheets
Do While SheetCounter < 3
SheetCounter = SheetCounter + 1
oRecordSet.MoveNext
Loop
'Create the necessary number of additional tabs in Excel
newBook.Worksheets.Add
oRecordSet.MoveNext
Loop
Set oRecordSet = objCommand.Execute()
Do While Not oRecordSet.EOF
GroupName = oRecordSet.Fields("name")
GroupPath = "LDAP://" & oRecordSet.Fields("distinguishedName")
'Now call the Function to get the users. Pass it the username
newBook.Worksheets(GCounter).Activate
Wscript.Sleep 300
newBook.Worksheets(GCounter).Cells(1,1).value="Last Name"
newBook.Worksheets(GCounter).Cells(1,2).value="First Name"
If Len(GroupName)> 31 Then
GroupName = Left(Trim(GroupName),30)
End If
newBook.Worksheets(GCounter).Name = GroupName
newBook.Worksheets(GCounter).Cells(1,1).Font.Bold = True
newBook.Worksheets(GCounter).Cells(1,2).Font.Bold = True
xRow = 2
Set objGroup = GetObject(GroupPath)
For each objMember in objGroup.Members
newBook.Worksheets(GCounter).Cells(xRow,1).value=objMember.sn
newBook.Worksheets(GCounter).Cells(xRow,2).value=objMember.givenName
newBook.Worksheets(GCounter).Columns("A:B").EntireColumn.AutoFit
xRow = xRow + 1
Next
Wscript.Sleep 100
'On Error Goto 0
'Sort the data
Set objRange = newBook.Worksheets(GCounter).UsedRange
Set objRange2 = newBook.Worksheets(GCounter).Range("A1")
Set objRange3 = newBook.Worksheets(GCounter).Range("B1")
objRange.Sort objRange2,xlAscending,objRange3,,xlAscending,,,xlYes
'expression.Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header,
GCounter= GCounter + 1
oRecordSet.MoveNext
Loop