C# Active directory : création d'OU et d'utilisateurs

Messages postés
4
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
11 novembre 2009
- - Dernière réponse : Vladimor
Messages postés
5
Date d'inscription
jeudi 18 novembre 2010
Statut
Membre
Dernière intervention
6 juillet 2012
- 3 déc. 2010 à 09:51
Bonjour,

Je travaille actuellement sur une application permettant (à partir d'un fichier CSV) de récupérer toutes les lignes qui correspondent à des utilisateurs (nom, prenom, mot de passe, type d'utilisateur) pour ensuite les ajouter dans l'Active directory.

Le type d'utilisateur sera dans l'active directory l'unité organisationnelle.

Ma chaine de connexion LDAP est en attribut static privé de cette forme :

           ldap = new DirectoryEntry("LDAP://192.168.1.1", "Admin", "motdepasse", AuthenticationTypes.Secure);


Je créé donc une OU avant tout :
        public void CreerOU(string nomOU)
        {
            try
            {
                // Créer unité organisationnelle
                DirectoryEntry newOU = ldap.Children.Add("OU="+nomOU+"", "organizationalUnit");
                newOU.CommitChanges();
                //newOU.Dispose();
                //ldap.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erreur creation UO", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


Jusque là tout va bien, l'OU se créé bien dans l'active directory.

Cela se complique après...

Mon code pour ajouter un utilisateur me renvoie plusieurs erreurs (une pour chaque user) est le suivant :

        public void AjoutUtilisateur(string nom, string prenom, string login, string mdp,string uo)
        {
            try
            {
                // Création de l'utilisateur initialisation de ses propriétés
                DirectoryEntry user = ldap.Children.Add("cn="+nom.ToUpper()+" "+prenom+"", "user");

                user.Properties["SAMAccountName"].Add(login);
                user.Properties["sn"].Add(nom);
                user.Properties["givenName"].Add(prenom);
                user.Properties["profilePath"].Add(login);
                // On envoie les modifications au serveur
                user.CommitChanges();

                /* On va maintenant lui définir son mot de passe. L'utilisateur doit 
                 * avoir été créé et sauvé avant de pouvoir faire cette étape */
                user.Invoke("SetPassword", new object[] { mdp });

                // On va maintenant activer le compte
                user.Properties["userAccountControl"].Value = 544; ;
                //user.Properties["ou"].Add(uo);

                // On envoie les modifications au serveur
                user.CommitChanges();
            }
            catch (Exception ex)
            {
                // Affiche un message en cas d'erreur
                MessageBox.Show(ex.Message, "Erreur ajout", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

(Cette méthode est bien entendue exécutée dans une boucle qui varie selon le nombre d'utilisateurs présents dans le fichier csv que j'ai importé dans un datagridview)

Mais les utilisateurs sont quand même créés, bien qu'en étant désactivés et ne se trouvant pas dans le dossier Users (ils sont à la racine "monserveur.local").

Ma question est donc de savoir comment il est possible de créer des utilisateurs et de les placer directement dans l'OU que j'ai créé précédemment (sans qu'ils soient désactivés) ?
Et aussi de savoir comment rectifier l'erreur que je reçois dans ma boucle d'ajout d'utilisateurs ("Une exception a été levée par la cible d'un appel") ?

Merci d'avance !
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
5
Date d'inscription
jeudi 18 novembre 2010
Statut
Membre
Dernière intervention
6 juillet 2012
1
1
Merci
L'erreur vient de :
DirectoryEntry user = ldap.Children.Add("cn="+nom.ToUpper()+" "+prenom+"", "user");


Moi, j'aurais fait ca :
// Connexion à l'annuaire
DirectoryEntry Ldap = new DirectoryEntry("LDAP://votre-nom-AD", "Login", "Password");
// Création du user Test User et initialisation de ses propriétés
DirectoryEntry user = Ldap.Children.Add("cn=Test User", "user");
user.Properties["SAMAccountName"].Add("testuser");
user.Properties["sn"].Add("User");
user.Properties["givenName"].Add("Test");
user.Properties["description"].Add("Compte de test créé par le code");
// On envoie les modifications au serveur
user.CommitChanges();

// On va maintenant lui définir son password. L'utilisateur doit avoir été créé
// et sauvé avant de pouvoir faire cette étape
user.Invoke("SetPassword", new object [] {"motdepasse"});
// On va maintenant activer le compte : ADS_UF_NORMAL_ACCOUNT
user.Properties["userAccountControl"].Value = 0x0200;
// On envoie les modifications au serveur
user.CommitChanges();

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 196 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Vladimor
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
11
0
Merci
hello,

et quel est le message d'erreur ?

Chris...
- Le sens vital n'est pas un sens unique -
Commenter la réponse de cboulas
Messages postés
4
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
11 novembre 2009
0
Merci
Et bien comme je l'ai dis précédemment c'est celle-ci : "Une exception a été levée par la cible d'un appel".
Ce message d'erreur provient du catch de l'ajout d'utilisateur dans l'AD, il apparait donc autant de fois qu'il y a d'utilisateurs.
Commenter la réponse de hobtechfr