måndag 30 mars 2009

DEVTIPS #1 Active Directory Sökning

Lägg till en referens till System.DirectoryServices för att kommunicera med Active Directory trädet.

using System.DirectoryServices;

  • Skapa först ett DirectoryEntry object och binda till AD-trädet. Detta entry används sedan som sökrot för DirectorySearcher.
DirectoryEntry de = new DirectoryEntry("LDAP://ad.domain.lan/ou=startorg, dc=domain, dc=lan", "användarnamn", "lösenord");
string filter = "(&(objectClass=OrganizationalUnit)(ou=Namn här*))";
            SearchResultCollection src = null;
            try {
  • använd using här annars kommer directorysearcher att leva kvar väldigt länge och ta upp connections vilket kan leda till stora problem.
                using (DirectorySearcher ds = new DirectorySearcher(de, filter)) {
                    src = ds.FindAll();
                }
            } catch {
  • stäng root entryt om något går snett. Väldigt viktigt! Och disposa searchresult. Samma sak här det blir hängande connections kvar mot trädet.
                de.Close();
                src.Dispose();
            }
            if (src != null) {
                foreach (SearchResult sr in src) {
  • I searchresult ligger sedan alla hittade entries, väldigt smidigt.
                    DirectoryEntry deFound = sr.GetDirectoryEntry();
                    MessageBox.Show(deFound.Guid.ToString());
                }
            }
  • Rensa upp connections mot trädet.
            src.Dispose();
            de.Close();

Hela koden:
DirectoryEntry de = new DirectoryEntry("LDAP://ad.domain.lan/ou=startorg, dc=domain, dc=lan", "användarnamn", "lösenord");
string filter = "(&(objectClass=OrganizationalUnit)(ou=Namn här*))";
SearchResultCollection src = null;
try {
 using (DirectorySearcher ds = new DirectorySearcher(de, filter)) {
               src = ds.FindAll();
      }
} catch {
        de.Close();
        src.Dispose();
}
if (src != null) {
        foreach (SearchResult sr in src) {
                DirectoryEntry deFound = sr.GetDirectoryEntry();
                MessageBox.Show(deFound.Guid.ToString());
        }
}
src.Dispose();
de.Close();

1 kommentar:

Anonym sa...

vad jag letade efter, tack