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;
}
} |
Partager