Bonjour,

Je travaille sur la création d'une page permettant de créer des utilisateurs dans l'AD. J'arrive à me connecter et à créer l'utilisateur, mais au moment d'invoker la méthode "SetPassword", j'obtiens l'erreur suivante :

Main Exception: Exception has been thrown by the target of an invocation.

Inner Exception: The filename, directory name, or volume label syntax is incorrect. (Exception from HRESULT: 0x8007007B)":null
Voici mon code pour créer l'utilisateur :

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
 
public bool CreateUserAccount(string newUserName, string newUserPassword, string newUserLastName, string newUserFirstName, string newUserCompany, string newUserEmailAddress, string newUserDisplayName)
        {
            bool bCreationStatus = false;
            try
            {
                string connectionPrefix = this.LDAPPath;
                DirectoryEntry dirEntry = new DirectoryEntry(connectionPrefix, this.LDAPUser, this.LDAPPassword);
 
                DirectoryEntry newUser = dirEntry.Children.Add("CN=" + newUserName, "user");
 
                // Feeds new user properties
                newUser.Properties[ADProperties.LASTNAME].Value = newUserLastName;
                newUser.CommitChanges();
 
                newUser.Properties[ADProperties.FIRSTNAME].Value = newUserFirstName;
                newUser.CommitChanges();
 
                newUser.Properties[ADProperties.DISPLAYNAME].Value = newUserDisplayName;
                newUser.CommitChanges();
 
                newUser.Properties[ADProperties.LOGINNAME].Value = newUserName;
                newUser.CommitChanges();
 
                newUser.Properties[ADProperties.COMPANY].Value = newUserCompany;
                newUser.CommitChanges();
 
                newUser.Properties[ADProperties.EMAILADDRESS].Value = newUserEmailAddress;
                newUser.CommitChanges();
 
                // oGUID = newUser.Guid.ToString();
 
                newUser.Invoke("SetPassword", new object[] { newUserPassword });
                newUser.CommitChanges();
 
                this.SetAccountExpiresDate(newUser, DateTime.Now.AddMonths(+3));
                newUser.CommitChanges();
 
                dirEntry.Close();
                newUser.Close();
 
                bCreationStatus = true;
            }
            catch (System.DirectoryServices.DirectoryServicesCOMException E)
            {
                bCreationStatus = false;
            }
            return bCreationStatus;
        }
L'erreur survient à cet endroit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
newUser.Invoke("SetPassword", new object[] { newUserPassword });
J'ai essayé d'impersonifier le code à cet endroit, mais ça ne change rien.

J'ai aussi pensé que le problème venait de la complexité de mon password. Je le génère en utilisant une classe spécifique. Ensuite je teste le password afin de savoir s'il est suffisamment complexe ou non. S'il ne l'est pas, on en génère un nouveau et on recommence le test. S'il passe le test, alors on l'attribue à l'utilisateur. Le test est une expression régulière, et les passwords générés répondent toujours aux critères de complexité de l'AD... Donc le problème ne vient à priori pas de là.

Avez-vous une idée ?

Merci par avance pour votre aide.