Comment obtenir / mettre à jour les “Contacts” dans Active Directory?

Existe-t-il un moyen de rechercher et de mettre à jour les contacts dans Active Directory? Je construis un exemple d’application C # .NET pour réaliser cette tâche. J’apprécierais n’importe quel code.

Bien sûr, vous pouvez le faire dans System.DirectoryServices.

Je pense que ce dont vous avez vraiment besoin, c’est d’apprendre à utiliser System.DirectoryServices . Si vous n’avez pas encore un bon livre, je recommande celui-ci .

Ce n’est pas si difficile, vraiment. Vous avez juste besoin de maîsortingser deux classes, DirectoryEntry et DirectorySearcher . DirectoryEntry représente un object LDAP sur le serveur LDAP. En supposant que vous ayez les permissions suffisantes, vous pouvez apporter des modifications à n’importe quel object LDAP, y compris l’object contact à l’aide de DirectoryEntry . Chaque object LDAP a un certain nombre d’atsortingbuts. Deux atsortingbuts importants que vous devez connaître sont objectCategory et objectClass . Pour l’object contact, objectCategory doit être une person et objectClass doit être un contact . Vous voudrez peut-être également vérifier l’atsortingbut “targetAddress” sur l’object contact, qui stocke l’adresse électronique. Il y a un tas d’atsortingbuts étendus Exchange sur l’object contact. Vous aimez probablement vérifier chacun d’eux un par un. Pour parcourir les objects sur le serveur LDAP, vous pouvez utiliser un outil tel que AD Explorer ou ADSI Edit.

Pour effectuer une recherche, vous devez fournir quatre éléments à DirectorySearcher .

  1. Racine de recherche
  2. Filtre de recherche LDAP
  3. Portée de la recherche
  4. Atsortingbuts retournés

Si votre ordinateur est déjà associé à un domaine et que vous vous connectez en tant qu’utilisateur de domaine, voici un exemple sur la façon de répertorier tous les contacts de votre domaine.

 DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE"); ssortingng domainContext = rootDSE.Properties["defaultNamingContext"].Value as ssortingng; DirectoryEntry searchRoot = new DirectoryEntry("LDAP://" + domainContext); using (DirectorySearcher searcher = new DirectorySearcher( searchRoot, "(&(objectCategory=person)(objectClass=contact))", new ssortingng[] {"targetAddress"}, SearchScope.Subtree)) { foreach (SearchResult result in searcher.FindAll()) { foreach (ssortingng addr in result.Properties["targetAddress"]) { Console.WriteLine(addr); } Console.WriteLine(result.Path); } } 

Les trois premières lignes vous aideront à trouver le chemin LDAP correct à la racine de votre domaine. Cela ne fonctionne que si vous vous connectez en tant qu’utilisateur de domaine. Si vous connaissez le chemin LDAP correct de votre domaine, vous pouvez simplement le saisir directement dans DirectoryEntry.

J’ai mis les quatre parameters dans DirectorySearcher . Lorsque vous vous familiariserez avec la programmation des services d’annuaire, vous pourrez en ignorer certaines et .NET vous fournira une valeur par défaut.

Le résultat renvoyé par DiectorySearcher est SearchResult . Notez que SearchResult vous renvoie toujours une collection d’objects même si targetAddress n’est pas un atsortingbut à plusieurs targetAddress . C’est parce que certains atsortingbuts de l’object LDAP peuvent avoir plusieurs valeurs.

Une autre information importante que vous pouvez obtenir de SearchResult est le Path . Vous pouvez créer un object DirectoryEntry à l’ aide de ce chemin ultérieurement. Pour mettre à jour votre object contact, vous devez utiliser sa méthode Properties et CommitChanges méthode CommitChanges .

 DirectoryEntry de = new DirectoryEntry(result.Path); de.Properties["targetAddress"].Value = "SMTP:[email protected]"; de.CommitChanges(); 

Enfin, vous pouvez facilement trouver beaucoup de tutoriels en ligne sur DirectorySearcher et DirectoryEntry . Essayez google it.

Je pense que vous voulez dire la mise à jour des propriétés sur un object utilisateur dans Active Directory. Et oui c’est possible.

Avec .Net 3.5, nous avons obtenu l’espace de noms System.DirectoryServices.AccountManagement ce qui simplifie considérablement les relations avec AD par rapport à ce qui était auparavant dans l’espace de noms System.DirectoryServices .

Généralement, pour modifier les propriétés d’un utilisateur (si vous avez le droit de sauvegarder), vous feriez quelque chose comme:

 ssortingng sUserName = "someusertoload"; ssortingng sDomain = "test.local"; ssortingng sDefaultOU = "OU=test,DC=test,DC=local"; ssortingng sServiceUser = "userwithrights"; ssortingng sServicePassword = "somepassword"; PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sDefaultOU,ContextOptions.SimpleBind, sServiceUser, sServicePassword); UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(oPrincipalContext, sUserName); oUserPrincipal.GivenName = "new givenname"; oUserPrincipal.Save(); 

Vous pouvez trouver quelques méthodes d’assistance ici .

Échantillon de code pour .Net 2.0 qui récupère un utilisateur avec le nom d’utilisateur “john” et met à jour l’adresse postale de l’utilisateur. Vous devrez peut-être append des informations d’identification à la première ligne si l’utilisateur qui exécute l’application n’a pas le droit de modifier du contenu.

 DirectoryEntry root = new DirectoryEntry("LDAP://server/DC=test,DC=local"); DirectorySearcher searcher = new DirectorySearcher( root, "(&(objectCategory=person)(objectClass=user)(sAMAccountName=john))" ); SearchResult result = searcher.FindOne(); DirectoryEntry user = result.GetDirectoryEntry(); user.Properties["streetAddress"][0] = "My Street 12"; user.CommitChanges();