Voici un petit exemple (application console) pour se connecter à Active Directory puis afficher et mettre à jour une propriété sur un utilisateur.
Vous devez connaître le chemin LDAP où vous souhaiter travailler. La racine LDAP d'une Active Directory qui se nomme "test.local" est "LDAP://dc=test,dc=local", le chemin LDAP d'une unité d'organisation nommé "Unit" dans l'AD test.local est "LDAP://OU=Unit,DC=test,DC=local".
Vous devez, dans un premier temps, ajouter une référence à la librairie System.DirectoryServices et ensuite on peut coder :
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.DirectoryServices;
namespace myProject
{
class Program
{
static void Main(string[] args)
{
try
{
// Connexion à Active Directory avec le compte courant
Console.Write("Connexion AD: ");
DirectoryEntry Ldap = new DirectoryEntry("LDAP://DC=test,DC=local");
Console.WriteLine("OK");
// Obtient la liste des utilisateurs AD
Console.Write("Recupere la liste des utilisateurs: ");
DirectorySearcher searcher = new DirectorySearcher(Ldap);
searcher.Filter = "(objectClass=user)";
SearchResultCollection Users = searcher.FindAll();
Console.WriteLine("OK");
Console.WriteLine("Nombre d'utilisateurs trouvé dans AD: " + Users.Count.ToString());
foreach (SearchResult anUser in Users)
{
DirectoryEntry User = anUser.GetDirectoryEntry();
Console.WriteLine("Utilisateur " + User.Properties["cn"].Value);
// Ajouter au groupe TestGroup
// CN=TestGroup,OU=Unit,DC=test,DC=local
Console.Write("\t-> Integration au groupe TestGroup:");
DirectoryEntry TestGroup = new DirectoryEntry("CN=TestGroup,OU=Unit,DC=test,DC=local");
// Si l'utilisateur est déjà membre du groupe, on ne l'intégre pas !
if (!TestGroup.Properties["member"].Contains(User.Properties["distinguishedName"].Value))
{
TestGroup.Properties["member"].Add(User.Properties["distinguishedName"].Value);
TestGroup.CommitChanges();
Console.WriteLine("OK");
}
else Console.WriteLine("Utilisateur déjà membre de ce groupe !");
// Mise à jour du profil TS
Console.Write("\t-> Mise à jour du profil TS:");
String TSProfilPath = @"\\SERVEUR\profils\" + User.Properties["samAccountName"].Value;
Console.Write(TSProfilPath + " / ");
try
{
User.InvokeSet("TerminalServicesProfilePath", new object[] { TSProfilPath });
User.CommitChanges();
Console.WriteLine("OK");
}
catch (Exception ex)
{
Console.WriteLine("NOK (" + ex.Message + ")");
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
while (!Console.KeyAvailable) { System.Threading.Thread.Sleep(1000); }
}
}
}
















