Personnalisation de l’affichage dans Active Directory

Dès sa conception, Active Directory a été développé pour laisser une souplesse d’affichage aux administrateurs désirant ajouter de nouvelles informations ou de nouveaux menus contextuels.
Le service d’annuaire Active Directory est une base de données constituée d’attributs et de classes. Une classe est un regroupement d’attributs constituant un objet. Le schéma, qui est le squelette de la base de données Active Directory, n’est pas figé, celui-ci peut être facilement étendu. Cependant, beaucoup d’administrateurs se demandent comment afficher un attribut qui aurait été ajouté au schéma Active Directory. Voici comment personnaliser cet affichage.

L’interface Utilisateur dans Active Directory
L’interface utilisateur est pilotée intégralement par Active Directory. Chaque classe possède ses spécificités d’affichage dans l’interface utilisateur. Active Directory dispose de plusieurs possibilités d’affichage comme par exemple les pages de propriétés, le menu contextuel, les icônes, les assistants de création, … L’intérêt avec un tel mode de fonctionnement est que chacune peuvent être personnalisées soit par des applications d’administration soit par des applications destinées à des utilisateurs finaux.
Ces informations sont enregistrées dans un objet Active Directory appelé DisplaySpecifier présent dans la partition de configuration (donc commune à tous les serveurs Active Directory de la forêt). Tous ces objets sont enregistrés dans un conteneur DisplaySpecifier, correspondant à chaque paramètre régional reconnu par Windows.
DisplaySpecifiers la clef de la personnalisation de l’affichage
La partition de configuration Active Directory possède le conteneur DisplaySpecifiers. Celui-ci fournit les instructions d’affichage en fonction des paramètres régionaux. Chaque conteneur possède un code de langue. Puis sous chaque code langue, on retrouve les objets de la classe DisplaySpecifiers. Pour chaque objet on ajoute la chaîne « –Display » à la fin de l’attribut. La classe Contact possède un objet DisplaySpecifiers qui se nomme contact-Display. Afin d’accéder à cette partition, nous utilisons l’outil ADSI Edit disponible dans les « Support Tools » de Windows 2003 Server. Le chemin LDAP pour la langue française est le suivant :
Objet, CN=40C, CN=DisplaySpecifiers, CN=Configuration, DC=domaine, DC=domaine
**La localisation
**Chaque conteneur des paramètres régionaux peut recevoir des objets DisplaySpecifiers qui ont été localisés pour ce paramètre régional. Les applications utilisant l’interface graphique d’Active Directory recherchent tout d’abord un conteneur de paramètres régionaux dont le nom a été établi en fonction de l’identifiant du paramètre régional pour la session d’utilisateur en cours.
Tableau des codes de langue utilisés dans DisplaySpecifiers
Code ISO Langue
407 Allemand
409 Anglais
410 Italien
411 Japonais
40C Français
Le client LDAP « Utilisateurs et Ordinateurs Active Directory » recherche le code correspondant à sa langue locale. Si aucun code ne correspond, il utilise alors la version par défaut soit la version US) présente dans toutes les installations Active Directory.
Afin d’illustrer notre exemple de personnalisation d’affichage Active Directory, nous allons créer un script en VBscript qui a l’avantage d’être facilement implémenté par les administrateurs contrairement aux composants COM nécessitant des bases de programmation.


**Les différents composants personnalisables **
***Les pages de propriété


Les pages de propriétés d’un objet sont généralement des objets COM (Component Object Model). La description de celle-ci est enregistrée dans un attribut d’un objet DisplaySpecifiers dans Active Directory mais il doit également être enregistré sur le poste de travail qui se connecte à l’interface du service d’annuaire. Ces attributs sont multi valués. Chaque élément contient la description d’un seul objet COM. On parle d’Admin-Property-Pages (Pour les accès via Utilisateurs et Ordinateur Active Directory) et de Shell-Property-Pages (Pour les accès via le voisinage réseau).
La description d’un objet d’une Page de propriétés est enregistrée dans l’attribut Display-Specifier en tant que chaîne au format suivant :
Ordre, CLSID, données facultatives
=> L’ordre permet de fournir la position de la page sur la feuille. Ces numéros sont triés à l’aide d’une signature de sorte qu’il n’existe pas de position de départ imposée.
=> Le CLSID est une chaîne représentant l’UUID du composant COM.
=> Les données facultatives sont passées à l’objet COM par l’objet IShellExtInit::Initialize.
***Le menu contextuel


Les options du menu contextuel peuvent être des objets COM, des applications ou des scripts (comme dans notre exemple). Tout comme les pages de propriétés, les attributs des menus contextuels autorisent plusieurs valeurs. Chaque élément contient la description d’un seul objet COM ou d’une seule application. Ces attributs s’appellent Admin-Context-Menu et Shell-Context-Menu en fonction des accès (« Utilisateurs et ordinateurs Active Directory », voisinage réseau ou shell). Il existe également un attribut Context-Menu pour les options de menus qui sont communes aux utilisateurs et outils d’administration. L’objet implémente deux interfaces de shell : IShellExtInit et IContextMenut.
La description d’une application (ou script dans notre exemple) est enregistrée dans l’attribut Display-Specifier en tant que chaîne au format suivant :
Ordre, nom du menu contextuel, nom du programme
=> L’ordre détermine la position de l’option dans le menu contextuel. Ces numéros sont triés à l’aide d’une signature de sorte qu’il n’existe pas de position de départ imposée et qu’il puisse y avoir des intervalles dans la séquence.
=> Le nom du menu contextuel correspond à l’intitulé de l’option qui s’affiche dans le menu contextuel.
=> Le nom du programme correspond à l’application que va exécuter le composant logiciel enfichable. Il faut que le chemin complet soit spécifié ou que l’application se trouve dans le chemin de recherche (le client devant pouvoir y accéder).
***La modification des icones


Il est possible de personnaliser les icônes des objets depuis le spécificateur d’affichage. Chaque classe peut enregistrer plusieurs états d’icônes. La classe utilisateur peut, par exemple, différencier les états « activé » ou « désactivé ». Il existe un maximum de six états d’icône par classe. Le nom de l’attribut est Class-Icon. Celui-ci peut être spécifié de deux façons.
Etat, Fichier de l’icône
Etat, Fichier de la DLL , Ressource
=> L’état est un entier compris entre 0 et 15. 0 est l’état pour « fermé » (par défaut), 1 correspond à l’état « ouvert » et 2 correspond à désactivé. Les autres valeurs sont propres à chaque application.
=> Le fichier de l’icône ou de la DLL est un nom de fichier accessible par l’ordinateur local.
=> La ressource est un index commençant par zéro et qui pointe vers la liste d’icônes dans la ressource de la DLL.
Vous pouvez par exemple modifier l’icône par défaut d’un utilisateur désactivé en renseignant la valeur suivante dans l’attribut iconPath de l’objet user-Display :
2, C:\scripts\Udes.ico (nom de votre fichier icône).


**L’assistant de création **
Pour ajouter vos propres assistants de création de compte (comme le fait Exchange Server 200x), vous devez appeler l’assistant de création d’objets. Chaque d’objet peut utiliser un assistant de création spécifique ou alors utiliser celui fourni par défaut. Pour les objets basiques comme par exemple Utilisateur (User), le composant « Utilisateurs et ordinateurs Active Directory » fournit un assistant standard. Celui-ci peut être étoffé avec les composants d’administration d’Exchange Server pour créer la boite aux lettres de l’utilisateur. Vous pouvez créer vos propres assistants pour vos besoins spécifiques. Deux possibilités vous sont offertes avec Active Directory : remplacer intégralement l’assistant ou l’étoffer.
Pour le remplacer l’objet COM, il faut modifier l’attribut Creation-Wizard en suivant cette syntaxe :
**CLSID **
=> Le CLSID et une chaîne qui représente un UUID du composant COM
Pour étendre avec objet COM, il faut modifier l’attribut Create-Wizard-Ext en suivant cette syntaxe :
Ordre, CLSID
=> L’ordre permet d’indiquer l’ordre d’appel de votre assistant. Tout comme les pages de propriété, ce numéro est trié selon une comparaison signée. Ainsi il n’existe pas de position de départ imposée.
=> Le CLSID est une chaîne qui représente l’UUID de l’assistant
Contrairement aux objets COM des pages de propriétés, l’objet COM de l’assistant de création ne prend en charge qu’un seul de ces assistants.


**Script VBscript **
Le script suivant permet d’afficher et de modifier l’identifiant de l’utilisateur. Cet attribut étant déjà présent dans le schéma LDAP d’Active Directory, vous ne devez pas le modifier pour l’utiliser.
**Paramétrage d’Active Directory
**1) Ouvrez ADSIEDIT.msc (installé avec les supports tools)
2) Déplacez vous dans le conteneur suivant de la partition de configuration (Context Naming):
CN=Configuration, puis CN=DisplaySpecifiers, puis CN=40C pour la langue française,
3) Sélectionnez l’objet CN=user-display et ouvrez le en double-cliquant dessus,
4) Dans l’attribut context-menu ajoutez les informations suivantes :
1,&Identifiant Utilisateur,C:\scripts\ IdentifiantUser.vbs (le signe & permet de souligner le caractère dans les touches de raccourcis)

En utilisant la console « Utilisateurs et ordinateurs Active Directory » vous pouvez voir apparaitre cette nouvelle commande en faisant un clic droit sur un objet utilisateur.
Vous pouvez spécifier un chemin réseau UNC dans l’attribut pour que vos scripts fonctionnent également sur des postes distants.
Création du script d’affichage et de modification de l’identifiant de l’employé
IdentifiantUser.vbs
Dim oVar
Dim oUtilisateur
Dim temp
Set oVar = Wscript.Arguments
Set oUtilisateur = GetObject(oVar(0))
temp = InputBox("L’identifiant de l’utilisateur est : " & oUtilisateur.employeeID & vbCRLF & vbCRLF & "Vous pouvez le modifier en renseignant le nouvel identifiant")
if temp <> "" then oUtilisateur.Put "employeeID",temp
oUtilisateur.SetInfo
Set oUtilisateur = Nothing
WScript.Quit