Accueil Maintenance informatique
AUTOMATISATION AVEC ACTIVE DIRECTORY PDF Imprimer Envoyer
Écrit par Administrator   
Vendredi, 25 Mars 2011 09:48

Automatiser l’administrationd’Active Directory via ADSI

I) Introduction

La mission d’ADSI (Active Directory Services Interface) est de vous permettre de scripter le management d’Active Directory (AD en abrégé). L’objet de ce chapitre n’est pas de vous apprendre le fonctionnement d’Active Directory mais de voir com­ment créer des scripts avec cette interface, de la manipulation d’objets ou conteneurs AD (utilisateur, unité d’organisation, groupes, etc.) jusqu’aux attributs. Nous verrons ensuite l’intérêt du scripting ADSI pour effectuer des recherches dans l’AD.

II) Comment créer un script avec ADSI ?

la création de script avec ADSI est assez facile à appréhender. La méthode générale est la suivante : création d’une connexion à un objet, actions et applications des modifications dans l’AD.

III) Création d’une connexion à un objet

Pour pouvoir agir sur l’AD, il faut d’abord se positionner dans l’annuaire. Par exemple, avant de créer un objet utilisateur dans l’unité d’organisation LesUtilisateurs, il faut tout d’abord se connecter à cette unité d’organisation pour spécifier au système où l’on souhaite créer cet objet. De la même façon, pour modifier un attribut d’un objet utilisa­teur, il faut se connecter à cet objet. C’est ce qu’on appelle le processus de binding.

Cette connexion se fait en utilisant le chemin au format LDAP de l’objet, ou chemin

complet LDAP de l’objet. Par exemple, pour créer un objet utilisateur dans l’OU LesUtilisateurs du domaine masociete.com, il faut créer une connexion à l’OU en définissant son chemin LDAP complet. Voici comment créer cette connexion :

Set MaConnexion = _ GetObject(« LDAP ://ou=LesUtilisateurs,dc=masociete,dc=com »)

Pour se connecter à l’objet utilisateur cbravo dans cette OU (pour modifier un de ses attributs par exemple), on renseigne le chemin LDAP de l’objet :

Set MonUtilisateur = _ GetObject(« cn=cbravo,ou=LesUtilisateurs,dc=masociete,dc=com)

IV) Un petit mot sur les chemins LDAP

le premier élément à définir est l’objet ou le conte­neur visé. Si c’est un objet (utilisateur, ordinateur ou groupe), on précise cn="CNdelobjet" (cn pour Common Name), si c’est une OU, on précise directement ou="nom de l’OU". Ensuite il faut préciser dans quel OU se trouve l’objet, en partant de la dernière sous-OU et en remontant jusqu’à la racine de l’annuaire. Enfin, il faut préciser le nom DNS du domaine dans le sens normal de lecture avec comme référence DC="nom" (DC pour Domain Component), pour chaque référence DNS pointée.

Prenons un exemple clair. Supposons un objet utilisateur cbravo se trouvant dans l’OU suivante :

MASOCIETE.FRANCE.IDF.COM_>PARIS->SCRIPTOVORE->utilisateurs->cbravo

La première chose à faire pour la définition du chemin LDAP, est de renseigner le CN de l’objet utilisateur :

LDAP://cn=cbravo

Pour définir la localisation des OU, nous les prenons en partant de l’OU la plus proche de l’utilisateur, soit :

LDAP://cn=cbravo,ou=utilisateurs,ou=scriptovore,ou=paris

il nous reste à renseigner le domaine.

LDAP://cn=cbravo,ou=utilisateurs,ou=scriptovore,ou=paris, _

dc=masociete,dc=france,dc=idf,dc=com

Notre connexion ADSI se fait donc sous cette forme :

Set MonUtilisateur = GetObject _ ("LDAP://cn=cbravo,ou=utilisateurs,ou=scriptovore,ou=paris, _ dc=masociete,dc=france,dc=idf,dc=com")

V) comment manipuler les objets.

Manipuler les objets Active Directory

Avec ADSI, nous allons pouvoir créer, modifier ou supprimer des objets dans l’annuaire.

VI) Création d’un objet dans l’annuaire

Création d’une OU

Pour créer une OU de premier niveau nous nous connectons directement sur le domaine.

Set MonDomaine = GetObject(("LDAP://dc=masociete,dc=com")

set MonOU = MonDomaine.Create("organizationalUnit", "ou=MaPremiereOU")

MonOU.SetInfo   //Pour sauvegarder l’objet dans active directory

Le principe est le même pour toute autre création d’objet :

1 connexion au conteneur ;

2 action de création ;

3 sauvegarde du résultat.

Toutes les modifications sur des objets AD se font dans un cache,es modifications ne deviennent effectives qu’à partir du moment où on utilise la methode SetInfo

Création d’un utilisateur

Set MonOU =GetObject("LDAP://ou=test,dc=medianet,dc=fr")

Set MonUtilisateur = MonOU.Create("user", "cn=ahabert")

MonUtilisateur.Put "sAMAccountName", "ahabert"

MonUtilisateur.SetInfo

Création d’un groupe

Set MonOU = GetObject("LDAP://ou=test,dc=medianet,dc=fr")

Set MonGroupe = MonOU.Create("group", "cn=groupex")

MonGroupe.Put "sAMAccountName", "groupex"

MonGroupe.SetInfo

Suppression d’un objet dans l’annuaire

Suppression d’un objet utilisateur

Set MonOU = GetObject ("LDAP://ou=test,dc=medianet,dc=fr")

MonOU.Delete "user" , "cn=ahabert"

Suppression d’un groupe

Set MonOU = GetObject("LDAP://ou=test,dc=medianet,dc=fr")

MonOU.Delete "group", "cn=groupex"

Suppression d’une OU

si l’OU contient des objets, il faut d’abord supprimer l’ensemble des objets qu’elle contient

Set MonDomaine = GetObject("LDAP://dc=medianet,dc=fr")

MonDomaine.Delete "organizationalUnit", "ou=test"

Multiplier les créations ou les suppressions

Création d’un fichier utilisateur utilisateurs.txt

user1

user2

user3

user4

user5

Set objFSO = CreateObject("Scripting.FileSystemObject")

set objListe = objFSO.OpenTextFile("utilisateurs.txt")

Set MonOU = GetObject("LDAP://ou=test,dc=medianet,dc=fr")

Do Until objListe.AtEndOfStream

NomUtilisateur = objListe.Readline

set MonUtilisateur = MonOU.Create("user" , "cn =" & NomUtilisateur)

MonUtilisateur.put "sAMAccountName" , NomUtilisateur

MonUtilisateur.SetInfo

Loop

Travailler avec les attributs des objets

Lecture d’attributs d’un objet

Set MonUtilisateur = GetObject("LDAP://cn=user1,ou=test,dc=medianet,dc=fr")

MonUtilisateur.Get("description")

wscript.echo MonUtilisateur.Get("description")

Modification d’attributs d’un objet

Set MonUtilisateur = GetObject("LDAP://cn=user1,ou=test,dc=medianet,dc=fr")

MonUtilisateur.Put "description", "Un utilisateur sympathique"

Monutilisateur.SetInfo

MonUtilisateur.Get("description")

wscript.echo MonUtilisateur.Get("description")

Set MonUtilisateur = GetObject("LDAP://cn=user1,ou=test,dc=medianet,dc=fr")

MonUtilisateur.Put "description", "Un utilisateur sympathique"

MonUtilisateur.Put "telephoneNumber", "0160603535"

MonUtilisateur.Put "mail" , " Cette adresse email est protégée contre les robots des spammeurs, vous devez activer Javascript pour la voir. "

Monutilisateur.SetInfo

description=MonUtilisateur.Get("description")

telephone=MonUtilisateur.Get("telephonenumber")

mail=MonUtilisateur.Get("mail")

chaine=description & telephone & mail

wscript.echo chaine

Gérer les attributs à plusieurs valeurs

Certains attributs retournent plusieurs valeurs, par exemple les membres d’un groupe

Lecture d’attributs à plusieurs valeurs

GetEx : Cette méthode génère une collection avec les valeurs retournées

Cette collection va pouvoir être exploitée avec une boucle d’itération de collection

Set objGroupe = GetObject("LDAP://cn=groupex,ou=test,dc=medianet,dc=fr")

LesMembres = objGroupe.GetEx("member")

For Each Member in LesMembres

Wscript.Echo Member

Next

Écriture d’attributs à plusieurs valeurs

méthode PutEx pour renseigner des attributs multivaleurs

objet.PutEx MethodeDeMAJ, AttributaModifier, Array("valeur1","valeur2"...)

MethodeDeMAJ : il y a quatre méthodes de mise à jour avec PutEx, représentées par une valeur numérique.

1

Efface toutes les entrées.

2

Remplace les entrées.

3

Modifie une ou plusieurs entrées.

4

Supprime une ou plusieurs entrées.

AttributaModifier : l’attribut à modifier

 

Array : la collection de valeurs à ajouter ou à modifier. Pour supprimer l’ensemble des valeurs, utiliser le paramètre 1. Pour effacer toutes les entrées, utiliser 0 pour ce paramètre.

 

Effacer toutes les valeurs inscrites dans un attribut

Set objGroupe = GetObject("LDAP://cn=groupex,ou=test,dc=medianet,dc=fr")

objGroupe.PutEx 1,"member", 0

objGroupe.SetInfo

 

Utiliser PutEx pour l’effacement des attributs à valeur unique

 

Remplacer les entrées

Set objGroupe = GetObject("LDAP://cn=groupex,ou=test,dc=medianet,dc=fr")

objGroupe.PutEx 2,"member", Array("cn=user1,ou=test,dc=medianet,dc=fr")

objGroupe.SetInfo

 

Modifier une ou plusieurs entrées

Set objGroupe = GetObject("LDAP://cn=groupex,ou=test,dc=medianet,dc=fr")

objGroupe.PutEx 3,"member", Array("cn=user1,ou=test,dc=medianet,dc=fr")

objGroupe.SetInfo

 

Effacer une ou plusieurs entrées

Set objGroupe = GetObject("LDAP://cn=groupex,ou=test,dc=medianet,dc=fr")

objGroupe.PutEx 4,"member",Array("cn=user1,ou=test,dc=medianet,dc=fr")

objGroupe.SetInfo

Les opérations avec plusieurs entrées : La méthode est la même, il suffit de mettre plusieurs éléments dans les collections (Array).

 

Effectuer une suite d’opérations sur un objet Enfin, si vous vouez faire plusieurs opérations de suite sur un objet, comme effacer puis ajouter un élément, il faut impérativement faire un SetInfo entre les commandes pour qu’elles soient prises en compte (sinon, seule la dernière commande sera appliquée).

 

Faire des recherches dans Active Directory

Nous allons pouvoir faire des recherches par une technologie de recherche nommée ActiveX Data Object (ADO). ADO propose le fournisseur ADSI OLE DB pour lire des informations dans Active Directory (il existe d’autres interfaces OLE DB pour gérer toutes sortes de bases de données, mais nous nous intéressons ici unique­ment à Active Directory et l’interface de requête pour ADSI).

Les informations retournées par cette interface sont en lecture seule, il ne va donc pas être possible de l’utiliser pour écrire dans AD. Mais nous allons pouvoir utiliser le scrip­ting ADSI pour exploiter les informations retournées par la requête ADSI OLE DB.

Articulation d’une requête Active Directory avec ADSI

LES ETAPES

1 création d’un objet de connexion ADO ;

2 ouvertures du fournisseur ADSI OLE DB ;

3 créations d’un objet Command ;

4 spécifications de la connexion active ;

5 affecter le contenu de notre commande à l’objet Command préalablement instancié ;

6 exécuter la requête avec la méthode Exécute de l’objet Command ;

7 créations d’une boucle pour traiter les résultats.

Set objetConnexion = CreateObject("ADODB.Connection")

objetConnexion.Open "Provider=ADsDSOObject;"

Set objetCommande = CreateObject("ADODB.Command")

objetCommande.ActiveConnection = objetConnexion

Affecter le contenu de notre commande à l’objet Command préalablement instancié

objetCommande.CommandText = _"<Base de Recherche>;(ObjetCategory=TypeDobjet);Attribut;ChampDeRecherche"

 

<Base de Recherche> : chemin LDAP d’où doit démarrer la recherche dans l’arborescence. Par exemple, pour une requête sur tout le domaine masociete.com, ce paramètre serait: <LDAP://dc=masociete,dc=com>. Pour une requête commen­çant par l’OU Poitou, OU de premier niveau du domaine : <LDAP://ou=Poitou, dc=masociete,dc=com>.

(ObjetCategory=TypeDobjet) : sert à limiter la recherche à un type d’objet spéci­fique (utilisateur, groupe, ordinateur).

TypeDobjet : peut être group, user, computer, OrganisationalUnit. Ce paramètre est optionnel, vous pouvez ne pas le renseigner (laissez par contre les points virgules comme ceci : <baserecherche>;;attribut;champ.

Attribut : le ou les attributs à retourner par la requête. Pour en spécifier plu­sieurs, séparez-les par une virgule.

ChampDeRecherche : permet de spécifier si la requête se limite au niveau de la base

de recherche, ou si elle doit descendre aux sous-OU.

Pour effectuer une requête à un seul niveau, spécifier onelevel ; pour parcourir tousles sous-niveaux, spécifier subtree.

EXEMPLE

nous vou­lons retrouver le nom de tous les objets contenus dans l’OU test et ses sous-OU, quel que soit le type d’objet :

Set objetConnexion = CreateObject("ADODB.Connection")

objetConnexion.Open "Provider=ADsDSOObject;"

Set objetCommande = CreateObject("ADODB.Command")

objetCommande.ActiveConnection = objetConnexion

objetCommande.CommandText ="<LDAP://ou=test,dc=medianet,dc=fr>;;name;subtree"

Set objEnregistrement = objetCommande.Execute

Do Until objEnregistrement.EOF

wscript.echo objEnregistrement.Fields("name")

objEnregistrement.MoveNext

Loop

objetConnexion.Close

nom de tous les groupes contenus dans l’OU test et ses sous-OU dans le domaine medianet.fr :

Mise à jour le Vendredi, 25 Mars 2011 10:02
 
 

Partenaires

Formation en CIF

location de salle à paris

location de salle à paris

location de salle à paris