Re: C# and LDAP
- From: "Vish" <Vish@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Tue, 17 May 2005 20:12:02 -0700
Thanks for your reply.
SearchResult's property collection doesn't have prop 'Value'.
I am using framework 2.0.
Thanks.
"Joshua Flanagan" wrote:
> If you are not updating the directory, you do not need to retrieve the
> DirectoryEntry. The SearchResult object's Properties collection should
> contain all of the data you need (if it doesn't, add the missing
> property to your PropertiesToLoad).
>
> Instead of:
> dirEntry.Properties["userAccountControl"].Value
> use:
> sResult.Properties["userAccountControl"].Value
>
> and remove the call to GetDirectoryEntry(). That should speed up things
> quite a bit.
> Note you cannot update the values on a SearchResult.
>
> Joshua Flanagan
> http://flimflan.com/blog
>
>
> PS: Change your catch(Exception ex) to catch(COMException ex). It won't
> speed things up, but it will make sure you only catch exceptions truly
> caused by your AD lookup. It is good practice to only catch specific
> exception types that you can handle.
>
> Vish wrote:
> > Hello all,
> > I am trying to get all 'active' user details (username, firstname,
> > lastname) from win 2003 AD server using System.DirectoryServices. It works
> > fine. But it is too slow for getting all the 400 users. The following is the
> > code i have written.
> > I found that its doing s pretty quick search. But its taking quite some time
> > inside the 'foreach' loop to get the DirectoryEntry for each searchresult.
> > Any suggestions welcome! Thanks in advance.
> >
> > public void GetAvailableUsers()
> > {
> > DirectorySearcher dSearcher = new DirectorySearcher("LDAP://DC=" +
> > ADServers[0].Code.Trim() + ",DC=" + this.domain + ",DC=ORG");
> > dSearcher.SearchScope = SearchScope.Subtree;
> >
> > dSearcher.Filter =
> > "(&(objectCategory=person)(objectClass=user))";
> > dSearcher.PropertiesToLoad.Add("givenName");
> > dSearcher.PropertiesToLoad.Add("sn");
> > dSearcher.PropertiesToLoad.Add("sAMAccountName");
> >
> > dSearcher.PropertiesToLoad.Add("userAccountControl");
> >
> > SearchResultCollection sResults = dSearcher.FindAll();
> >
> > try
> > {
> > int i = 0;
> > foreach (SearchResult sResult in
> > sResults)//dSearcher.FindAll())
> > {
> >
> > DirectoryEntry dirEntry = sResult.GetDirectoryEntry();
> > i += 1;
> > if
> > (((((int)dirEntry.Properties["userAccountControl"].Value) & 2) == 0) &&
> > !(this.peakNetUsers.Contains(domain + @"\" +
> > dirEntry.Properties["sAMAccountName"].Value.ToString()))) //0=ENABLED
> > 2=DISABLED
> > {
> > //add user tomy list
> > }
> >
> > }
> >
> > }
> > catch (Exception ex)
> > {
> > //MessageBox.Show("Critical AD Server Error : " +
> > ex.Message, "Critical Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
> >
> > }
> >
> >
> > }
>
.
- Follow-Ups:
- Re: C# and LDAP
- From: Willy Denoyette [MVP]
- Re: C# and LDAP
- References:
- C# and LDAP
- From: Vish
- Re: C# and LDAP
- From: Joshua Flanagan
- C# and LDAP
- Prev by Date: Re: how can I create shared variables in c#
- Next by Date: Re: casting to a derived class
- Previous by thread: Re: C# and LDAP
- Next by thread: Re: C# and LDAP
- Index(es):