Go Back   TechArena Community > Technical Support > Computer Help > Window 2000 Help
Become a Member!
Forgot your username/password?
Register Tags Active Topics RSS Search Mark Forums Read SiteMap

Tags: , , , , ,

Sponsored Links



Active Directory Users with Group Membership Export to Excel

Window 2000 Help


Reply
 
Thread Tools Search this Thread
  #1  
Old 17-05-2006
tim.cole@ftnfinancial.com
 
Posts: n/a
Active Directory Users with Group Membership Export to Excel

Hi, can someone help me here. I'm not that great at scripting.......
Here's what I am looking to do....
I need to enumerate ALL active directory users THAT ARE NOT DISABLED,
into a spreadsheet with a list of their groups. For example, column A
and B on the spreadsheet is the first and last name, column C is the
groups that the user is a member of. I need to also make sure NOT to
list any accounts that are disabled.
The excel order is like:
John Doe
Domain User
Accounting
Any other Group
Jane Doe
Domain Users
Accounting
Randy Top
Domain Users


I have sort of been working on a script that I found that pulls the
first and last name into a spreadsheet, but I need help getting the
rest...........
ANY HELP IS GREATLY APPRECIATED!!!!!!!!!!!! THANKS!!!!!!!!!!!!!!!
Here is the scirpt I've been working with...

_____________________________________________________________________________
Dim ObjWb
Dim ObjExcel
Dim x, zz
Const ADS_UF_ACCOUNTDISABLE = 2
Set objRoot = GetObject("LDAP://RootDSE")
strDNC = objRoot.Get("DefaultNamingContext")
Set objDomain = GetObject("LDAP://" & strDNC) ' Bind to the top of the
Domain using LDAP using ROotDSE
Call ExcelSetup("Sheet1") ' Sub to make Excel Document
x = 1
Call enummembers(objDomain)
Sub enumMembers(objDomain)
On Error Resume Next
Dim Secondary(20) ' Variable to store the Array of 2ndary email alias's

For Each objMember In objDomain ' go through the collection

If ObjMember.Class = "user" Then ' if not User object, move on.
x = x + 1 ' counter used to increment the cells in Excel




FirstName = objMember.GivenName
LastName = objMember.sn
Manager = ObjMember.Manager
AdsPath = Objmember.Adspath

zz = 1 ' Counter for array of 2ndary email addresses
For each email in ObjMember.proxyAddresses
If Left (email,5) = "SMTP:" Then
Primary = Mid (email,6) ' if SMTP is all caps, then it's the Primary
ElseIf Left (email,5) = "smtp:" Then
Secondary(zz) = Mid (email,6) ' load the list of 2ndary SMTP
emails into Array.
zz = zz + 1
End If
Next
' Write the values to Excel, using the X counter to increment the rows.


objwb.Cells(x, 1).Value = FirstName
objwb.Cells(x, 2).Value = LastName
objwb.Cells(x, 3).Value = Manager
objwb.Cells(x, 4).Value = AdsPath

' Write out the Array for the 2ndary email addresses.
For ll = 1 To 20
objwb.Cells(x,26+ll).Value = Secondary(ll)
Next
' Blank out Variables in case the next object doesn't have a value for
the property

FirstName = "-"
LastName = "-"
Manager = "-"
For ll = 1 To 20
Secondary(ll) = ""
Next
End If

' If the AD enumeration runs into an OU object, call the Sub again to
itinerate

If objMember.Class = "organizationalUnit" or OBjMember.Class =
"container" Then
enumMembers (objMember)
End If
Next
End Sub
Sub ExcelSetup(shtName) ' This sub creates an Excel worksheet and adds
Column heads to the 1st row
Set objExcel = CreateObject("Excel.Application")
Set objwb = objExcel.Workbooks.Add
Set objwb = objExcel.ActiveWorkbook.Worksheets(shtName)
Objwb.Name = "Active Directory Users" ' name the sheet
objwb.Activate
objExcel.Visible = True
objwb.Cells(1, 1).Value = "FirstName"
objwb.Cells(1, 2).Value = "LastName"
objwb.Cells(1, 3).Value = "Manager"
objwb.Cells(1, 4).Value = "Adspath"
End Sub
MsgBox "Done" ' show that script is complete
_____________________________________________________________________________

Reply With Quote
  #2  
Old 18-05-2006
Richard Mueller
 
Posts: n/a
Re: Active Directory Users with Group Membership Export to Excel

Hi,

You've made a good start. Do you miss outputing the primary email address on
purpose?

A problem I see is that you already have a multi-valued attribute you are
documenting in the spreadsheet, proxyAddresses. Ordinarily I place
multi-valued attributes at the right end of the spreadsheet, as you have
done, so they can take up as many columns as necessary. There is no good way
to accomodate two multi-valued attributes, unless you cut off the number of
values documented. Normally, I would suggest using a dynamic array for
proxyAddresses, but in this case hard coding a dimension of 20 probably
helps.

In any case, group memberships can be handled the same way. The memberOf
attribute is multi-valued. It is a collection of the Distinguished Names of
the groups the user is a direct member of (except the user's "Primary"
group, which should be "Domain Users"). Perhaps add statements similar to:

Dim Groups(9) ' array for up to 10 group memberships.

If objMember.Class = "user" Then
...
jj = 0
For Each strGroup In objMember.memberOf
Groups(jj) = strGroup
jj = jj + 1
Next

...

For jj = 0 To 9
objwb.Cells(x, jj + 47).Value = Groups(jj)
Next

...

For jj = 0 To 9
Groups(jj) = "-"
Next

I ordinarily recommend removing "On Error Resume Next". I assume this was
added because the multi-valued attributes will raise errors if they have no
values or if there is just one value. Also the script will raise an error if
more than the maximum anticipated values in the multi-valued attributes are
encountered. Since the script is flawed (a user with one group, not counting
their "primary" group, will not have their membership documented - same for
proxyAddresses), I suggest removing "On Error Resume Next" and modifying to
fix this. Perhaps use:

jj = 0
arrGroups = objMemberMemberOf
If IsEmpty(arrGroups) Then
' do nothing, no group memberships.
ElseIf (TypeName(arrGroups) = "String") Then
' One group membership.
Groups(0) = arrGroups
Else
' More than one group membership
For Each strGroup In arrGroups
Groups(jj) = strGroup
jj = jj + 1
If (jj = 10) Then
' maximum documented is 10 (jj=0 to 9).
Exit For
End If
Next
End If

Something similar should be done for proxyAddresses. To eliminate disabled
users, test the AccountDisabled property method. For example:

For Each objMember In objDomain
If objMember.Class = "user" Then
If (objMember.AccountDisabled = False) Then
x = x + 1
...

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

<tim.cole@ftnfinancial.com> wrote in message
news:1147875317.395082.166740@38g2000cwa.googlegroups.com...
> Hi, can someone help me here. I'm not that great at scripting.......
> Here's what I am looking to do....
> I need to enumerate ALL active directory users THAT ARE NOT DISABLED,
> into a spreadsheet with a list of their groups. For example, column A
> and B on the spreadsheet is the first and last name, column C is the
> groups that the user is a member of. I need to also make sure NOT to
> list any accounts that are disabled.
> The excel order is like:
> John Doe
> Domain User
> Accounting
> Any other Group
> Jane Doe
> Domain Users
> Accounting
> Randy Top
> Domain Users
>
>
> I have sort of been working on a script that I found that pulls the
> first and last name into a spreadsheet, but I need help getting the
> rest...........
> ANY HELP IS GREATLY APPRECIATED!!!!!!!!!!!! THANKS!!!!!!!!!!!!!!!
> Here is the scirpt I've been working with...
>
> _____________________________________________________________________________
> Dim ObjWb
> Dim ObjExcel
> Dim x, zz
> Const ADS_UF_ACCOUNTDISABLE = 2
> Set objRoot = GetObject("LDAP://RootDSE")
> strDNC = objRoot.Get("DefaultNamingContext")
> Set objDomain = GetObject("LDAP://" & strDNC) ' Bind to the top of the
> Domain using LDAP using ROotDSE
> Call ExcelSetup("Sheet1") ' Sub to make Excel Document
> x = 1
> Call enummembers(objDomain)
> Sub enumMembers(objDomain)
> On Error Resume Next
> Dim Secondary(20) ' Variable to store the Array of 2ndary email alias's
>
> For Each objMember In objDomain ' go through the collection
>
> If ObjMember.Class = "user" Then ' if not User object, move on.
> x = x + 1 ' counter used to increment the cells in Excel
>
>
>
>
> FirstName = objMember.GivenName
> LastName = objMember.sn
> Manager = ObjMember.Manager
> AdsPath = Objmember.Adspath
>
> zz = 1 ' Counter for array of 2ndary email addresses
> For each email in ObjMember.proxyAddresses
> If Left (email,5) = "SMTP:" Then
> Primary = Mid (email,6) ' if SMTP is all caps, then it's the Primary
> ElseIf Left (email,5) = "smtp:" Then
> Secondary(zz) = Mid (email,6) ' load the list of 2ndary SMTP
> emails into Array.
> zz = zz + 1
> End If
> Next
> ' Write the values to Excel, using the X counter to increment the rows.
>
>
> objwb.Cells(x, 1).Value = FirstName
> objwb.Cells(x, 2).Value = LastName
> objwb.Cells(x, 3).Value = Manager
> objwb.Cells(x, 4).Value = AdsPath
>
> ' Write out the Array for the 2ndary email addresses.
> For ll = 1 To 20
> objwb.Cells(x,26+ll).Value = Secondary(ll)
> Next
> ' Blank out Variables in case the next object doesn't have a value for
> the property
>
> FirstName = "-"
> LastName = "-"
> Manager = "-"
> For ll = 1 To 20
> Secondary(ll) = ""
> Next
> End If
>
> ' If the AD enumeration runs into an OU object, call the Sub again to
> itinerate
>
> If objMember.Class = "organizationalUnit" or OBjMember.Class =
> "container" Then
> enumMembers (objMember)
> End If
> Next
> End Sub
> Sub ExcelSetup(shtName) ' This sub creates an Excel worksheet and adds
> Column heads to the 1st row
> Set objExcel = CreateObject("Excel.Application")
> Set objwb = objExcel.Workbooks.Add
> Set objwb = objExcel.ActiveWorkbook.Worksheets(shtName)
> Objwb.Name = "Active Directory Users" ' name the sheet
> objwb.Activate
> objExcel.Visible = True
> objwb.Cells(1, 1).Value = "FirstName"
> objwb.Cells(1, 2).Value = "LastName"
> objwb.Cells(1, 3).Value = "Manager"
> objwb.Cells(1, 4).Value = "Adspath"
> End Sub
> MsgBox "Done" ' show that script is complete
> _____________________________________________________________________________
>



Reply With Quote
  #3  
Old 18-05-2006
tim.cole@ftnfinancial.com
 
Posts: n/a
Re: Active Directory Users with Group Membership Export to Excel

Thanks so much.... I appreciate it....but I'm not sure I know WHERE to
make these additions...

Reply With Quote
Reply

  TechArena Community > Technical Support > Computer Help > Window 2000 Help


Thread Tools Search this Thread
Search this Thread:

Advanced Search


Similar Threads for: "Active Directory Users with Group Membership Export to Excel"
Thread Thread Starter Forum Replies Last Post
How to stop a group of users to login to active directory domain TechPK Operating Systems 2 02-05-2009 12:20 AM
Export only Distribution List Members from Active Directory to Excel Patrick Active Directory 6 17-04-2009 07:12 PM
Export Group membership using script\CSVDE PK Windows Server Help 3 08-10-2007 08:46 PM
Export All Active Directory Group memberships to a .txt file RandomEcho Windows Server Help 1 13-07-2007 06:31 AM
Cannot add a user to group using active directory users and computers console Rahul Active Directory 3 07-06-2007 12:41 AM


All times are GMT +5.5. The time now is 09:43 AM.