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

hobtechfr Messages postés 4 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 11 novembre 2009 - 8 nov. 2009 à 15:32
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 !

3 réponses

Vladimor Messages postés 5 Date d'inscription jeudi 18 novembre 2010 Statut Membre Dernière intervention 6 juillet 2012 1
3 déc. 2010 à 09:51
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();
1
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
9 nov. 2009 à 15:46
hello,

et quel est le message d'erreur ?

Chris...
- Le sens vital n'est pas un sens unique -
0
hobtechfr Messages postés 4 Date d'inscription dimanche 5 juin 2005 Statut Membre Dernière intervention 11 novembre 2009
11 nov. 2009 à 16:24
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.
0
Rejoignez-nous