J'ai un problème qui n'arrive pas 100% du temps sur mon poste et 100% du temps quand je l'exécute sur le serveur qui héberge la tâche.

Sur mon poste j'obtiens l'erreur "La méthode d'authentification demandée n'est pas prise en charge par le serveur".

Sur le serveur j'obtiens "Le serveur n'est pas opérationnel".

Comme je l'ai dis, si j'exécute le code sur mon poste, 2 fois sur 3, le code s'exécute sans problème.

Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
public void CreerComptesEnLot(string nomDomaine, string loginDomaine, string passwordDomaine, string LoginLdap, string passwordLdap, DataTable listeComptes)
        {
            try
            {
                // Connexion à l'annuaire (avec aucun OU de spécifié, pour faire la recherche sur tout l'A/D
                // exemple, un étudiant qui est aussi membre du personnel
                DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + nomDomaine + "/dc=domaine, dc=ca", loginDomaine, passwordDomaine, AuthenticationTypes.Secure);
 
                DirectorySearcher searcher = new DirectorySearcher(Ldap);
 
                //On parcours la liste des users du fichier
                foreach (DataRow row in listeComptes.Rows)
                {
                    //On filtre sur tous les objets de la catégorie User et dont le cn est le cip qu'on veut insérer
                    searcher.Filter = "(&(objectCategory=user)(cn=" + row["cip"].ToString() + "))";
 
                    //On vérifie que l'usager n'existe pas déjà
                    if (searcher.FindOne() == null)
                    {
                        Ldap.Close();
                        Ldap = null;
 
                        //Maintenant on se place dans le OU étudiants pour faire la création des comptes
                        Ldap = new DirectoryEntry("LDAP://" + nomDomaine + "/ou=Etudiants, dc=domaine, dc=ca", loginDomaine, passwordDomaine, AuthenticationTypes.Secure);
 
                        //On format la date du fichier en dd/mm/yyyy
                        string dateNaissance = row["dateNaissance"].ToString().Substring(row["dateNaissance"].ToString().Length - 2, 2);
                        dateNaissance += "/" + row["dateNaissance"].ToString().Substring(row["dateNaissance"].ToString().Length - 4, 2);
                        dateNaissance += "/" + row["dateNaissance"].ToString().Substring(0, 4);
 
                        // Création du user et initialisation de ses propriétés
                        DirectoryEntry user = Ldap.Children.Add("cn=" + row["cip"].ToString(), "User");
                        user.Properties["SAMAccountName"].Add(row["cip"].ToString());
                        user.Properties["sn"].Add(row["nom"].ToString());
                        user.Properties["givenName"].Add(row["prenom"].ToString());
                        user.Properties["userPrincipalName"].Add(row["cip"].ToString() + "@domain.ca");
                        user.Properties["displayName"].Add(row["prenom"].ToString() + " " + row["nom"].ToString());
                        user.Properties["info"].Add(row["matricule"].ToString());
 
                        //On va chercher le email du user sur le Ldap et si on ne le trouve pas on va mettre matricule@domaine.ca
                        user.Properties["mail"].Add(GetEmailFromLdapExterne(LoginLdap, passwordLdap, row["cip"].ToString(), row["matricule"].ToString()));
 
                        user.Properties["scriptPath"].Add("etudiant.bat");
 
                        user.Properties["comment"].Add(dateNaissance);
 
                        // 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[] { row["matricule"].ToString() });
                        // On va maintenant activer le compte et faire en sorte que le mot de passe n'expire jamais (0x0200 + 0x10000)
                        user.Properties["userAccountControl"].Value = 0x10200;
                        // On envoie les modifications au serveur
                        user.CommitChanges();
 
                        //on ajoute le user dans le groupe des etudiants
                        if (AddUserToGroupEtudiant(user))
                        {
                            //On crée son répertoire personnel
                            DirectoryInfo homefolder = CreateUserHomeDirectory(@"\\serveur\etudiant$\" + row["cip"].ToString());
 
                            if (homefolder != null)
                            {
                                //On donne les droits par défaut à l'étudiant sur son répertoire
                                SetUserDefaultRightsOnHomeFolder(@"\\serveur\etudiant$\" + row["cip"].ToString(), row["cip"].ToString(), nomDomaine);
                            }
                        }
 
                        user.Close();
                        Log("INFO - " + row["cip"].ToString() + " créé avec succès");
                    }
                    else
                    {
                        Log("WARNING - " + row["cip"].ToString() + " n'a pas été créé car il est déjà existant (Soit dans le OU Etudiants ou dans un autre conteneur).");
                    }
                }
            }
            catch (Exception exc)
            {
                Log("ERROR - " + exc.Message);
                throw exc;
            }
        }
Cette fonction permet d'ajouter des comptes en lots à partir d'un fichier CSV dans l'active directory.

Ce que je trouve étrange aussi, c'est que ca ne plante pas au premier enregistrement, mais après 30-40 aléatoirement. Se pourrait-il qu'il me manque un "flush" de quelques objets que ce soit?...

Merci de votre aide à l'avance!