C# Active directory : création d'OU et d'utilisateurs
hobtechfr
Messages postés4Date d'inscriptiondimanche 5 juin 2005StatutMembreDernière intervention11 novembre 2009
-
8 nov. 2009 à 15:32
Vladimor
Messages postés5Date d'inscriptionjeudi 18 novembre 2010StatutMembreDerniè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);
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") ?
Vladimor
Messages postés5Date d'inscriptionjeudi 18 novembre 2010StatutMembreDernière intervention 6 juillet 20121 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();
hobtechfr
Messages postés4Date d'inscriptiondimanche 5 juin 2005StatutMembreDernière intervention11 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.