Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives
Les informations contenues dans ce document pourront faire l'objet de modifications sans préavis. Sauf mention contraire, les sociétés, les noms et les données utilisés dans les exemples sont fictifs. L'utilisateur est tenu d'observer la réglementation relative aux droits d'auteur applicable dans son pays. Aucune partie de ce manuel ne peut être reproduite ou transmise à quelque fin ou par quelque moyen que ce soit, électronique ou mécanique, sans la permission expresse et écrite de Microsoft Corporation. Si toutefois, votre seul moyen d'accès est électronique, le présent document vous autorise une et une seule copie. Les produits mentionnés dans ce document peuvent faire l'objet de brevets, de dépôts de brevets en cours, de marques, de droits d'auteur ou d'autres droits de propriété intellectuelle et industrielle de Microsoft. Sauf stipulation expresse contraire d'un contrat de licence écrit de Microsoft, la fourniture de ce document n'a pas pour effet de vous concéder une licence sur ces brevets, marques, droits d'auteur ou autres droits de propriété intellectuelle. 2000 Microsoft Corporation. Tous droits réservés. Microsoft, Active Directory, BackOffice, FrontPage, IntelliMirror, PowerPoint, Visual Basic, Visual Studio, Win32, Windows, Windows Media et Windows NT sont soit des marques déposées de Microsoft Corporation, soit des marques de Microsoft Corporation aux États-Unis d'amérique et/ou dans d'autres pays. Les autres noms de produit et de société mentionnés dans ce document sont des marques de leurs propriétaires respectifs. Chef de projet : Mark Johnson Concepteurs pédagogiques : Aneetinder Chowdhry (NIIT [USA] Inc.), Bhaskar Sengupta (NIIT [USA] Inc.) Directeur de programme : Paul Adare (FYI TechKnowlogy Services) Responsable de programme : Gregory Weber (Volt Computer Services) Consultants techniques : Jeff Clark, Chris Slemp Graphiste : Julie Stone (indépendante) Responsable d'édition : Lynette Skinner Éditeur : Jeffrey Gilbert Correctrice : Kaarin Dolliver (S&T Consulting) Responsables des tests : Sid Benavente, Keith Cotton Développeur des tests : Greg Stemp (S&T OnSite) Ingénieurs-testeurs du cours : Jeff Clark, H. James Toland III Responsable de programme en ligne : Debbi Conger Responsable des publications en ligne : Arlo Emerson (Aditi) Assistance en ligne : David Myka (S&T Consulting) Développement des présentations multimédias : Kelly Renner (Entex) Test du cours : Data Dimensions, Inc. Assistance à la production : Irene Barnett (S&T Consulting) Responsable de la fabrication : Rick Terek Assistance à la fabrication : Laura King (S&T OnSite) Responsable produit, Services de développement : Bo Galford Responsables produit : Gerry Lang, Julie Truax Directeur de l'unité produit : Robert Stewart
Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives 1 Objectifs À la fin de cet atelier, vous serez à même d'effectuer les tâches suivantes :!" créer plusieurs objets du service d'annuaire Active Directory ;!" modifier plusieurs objets Active Directory ;!" supprimer plusieurs objets Active Directory. Conditions préalables Avant de poursuivre, vous devez disposer de connaissances dans les domaines suivants :!" service d'annuaire Active Directory ;!" protocole LDAP (Lightweight Directory Access Protocol) ;!" écriture de fichiers de commandes. Mise en place de l'atelier Pour réaliser cet atelier, vous devez disposer des éléments suivants :!" un ordinateur exécutant Microsoft Windows 2000 Server configuré en tant que contrôleur de domaine ;!" les scripts Cr_user.vbs, Mod_user.vbs, Del_user.vbs et le fichier Users.txt situés dans le dossier Appendix du CD-ROM du stagiaire. Pour plus d'informations Pour plus d'informations sur l'utilisation des interfaces ADSI (Active Directory Service Interface), consultez le site Web à l'adresse suivante : http://msdn.microsoft.com/developer/windows2000/adsi Présentation de l'atelier Cet atelier permet au stagiaire d'utiliser trois scripts ADSI pour créer, modifier et supprimer plusieurs objets utilisateur. Le premier script extrait des données d'un fichier texte, modifié par le stagiaire afin d'être utilisé avec les deux autres scripts. Chaque exercice dépend de la tâche effectuée dans l'exercice précédent.
2 Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives Scénario Vous êtes administrateur dans une entreprise et devez ajouter, modifier et supprimer quotidiennement des centaines d'utilisateurs, de groupes et d'unités d'organisation du réseau. Vous souhaitez automatiser la plupart de ces tâches à l'aide de l'environnement d'exécution de scripts Windows et des scripts ADSI. Vous êtes chargé d'effectuer les tâches suivantes :!" créer une unité d'organisation Human Resources ;!" ajouter plusieurs utilisateurs ainsi que leur fonction dans l'unité d'organisation Human Resources ;!" modifier les fonctions de plusieurs utilisateurs ;!" supprimer plusieurs utilisateurs. Durée approximative de cet atelier : 60 minutes Généralités ADSI est un ensemble d'interfaces génériques qui vous permettent d'accéder et d'utiliser différents services d'annuaire. Cet atelier traite du service d'annuaire Active Directory de Windows 2000. Vous pouvez accéder à Active Directory de différentes manières. Il est recommandé d'utiliser ADSI comme interface de programmation d'applications (API, Application Programming Interface) pour accéder à Active Directory. ADSI communique avec Active Directory à l'aide du protocole LDAP. Lorsque vous utilisez un script pour accéder à un objet dans Active Directory, vous devez fournir l'espace de noms LDAP, l'identificateur de programmes, en l'occurrence ProgID, et le chemin d'accès de l'objet, ADsPath. Vous créez ensuite une liaison au domaine afin de fournir un point de référence pour la création et la modification d'objets Active Directory. Espace de noms Un espace de noms est un ensemble de noms uniques. Par exemple, les fichiers stockés sur un lecteur de disque sont situés dans l'espace de noms du système de fichiers. Le nom unique d'un fichier est fonction de son emplacement de stockage dans l'espace de noms du système de fichiers, par exemple : C:\public\documents\adsi\adsi_spec_v3.doc Les espaces de noms du service d'annuaire identifient également les objets qu'ils contiennent par des noms uniques, qui dépendent généralement de l'emplacement de l'annuaire où est situé l'objet. Par exemple, dans Active Directory, un objet donné peut avoir un nom de ce type : CN=jsmith, OU=Sales, DC=nwtraders, DC=msft ProgID et ADsPath ADSI utilise une convention de dénomination qui peut identifier de manière unique un objet ADSI dans un environnement hétérogène. Ces noms sont appelés chaînes ADsPath. Elles comprennent un ProgID (par exemple LDAP: ou WinNT:) et le chemin d'accès du fournisseur.
Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives 3 Le tableau suivant fournit des exemples de chaînes AdsPath : Objet ADSI Unité d'organisation du domaine nwtraders Objet Exchange sur le serveur Exchange Utilisateur jsmith dans l'unité d'organisation Sales du domaine nwtraders comp1 du domaine Redmond alice, utilisateur local sur l'ordinateur comp1 Chemin d'accès LDAP://OU=Sales, DC=nwtraders, DC=msft LDAP://exch01/O=Microsoft LDAP://CN=jsmith, OU=Sales, DC=nwtraders, DC=msft WinNT://REDMOND/comp1, computer WinNT://REDMOND/comp1/alice Notez que chaque ProgID correspond à un espace de noms unique. Entrée rootdse Le standard LDAP, défini dans la RFC (Request For Comments) 2251, nécessite que tous les annuaires LDAP conservent une entrée spéciale, appelée objet rootdse. Cette entrée fournit un ensemble d'attributs opérationnels standard que l'utilisateur peut lire pour trouver les caractéristiques fondamentales de l'annuaire et du serveur. L'entrée rootdse peut également fournir un certain nombre d'attributs spécifiques à un fournisseur. defaultnamingcontext constitue l'un des attributs opérationnels standard. Il contient le nom unique de la racine de l'annuaire. Dans Windows 2000, il s'agit du nom unique du conteneur de domaine à la racine de l'arborescence existante. En lisant l'attribut defaultnamingcontext de l'entrée rootdse, vous pouvez déterminer à quel domaine vous êtes connecté lors de l'exécution. ADSI fournit un mécanisme spécial de liaison à l'entrée rootdse en utilisant l'adspath "LDAP:// rootdse." set Root = GetObject("LDAP://RootDSE") Vous pouvez ensuite extraire le contexte de dénomination par défaut : DomainPath = Root.Get("DefaultNamingContext") Puis, vous pouvez créer une liaison à la racine du domaine : Set Domain = GetObject("LDAP://"& DomainPath) Ces trois lignes de code apparaissent au début de la plupart des scripts ADSI que vous créez. Elles définissent le point de référence de votre script pour que vous puissiez créer des utilisateurs, des groupes et des unités d'organisation au sein du domaine. Vous ne devez jamais utiliser un nom de serveur spécifique. En outre, dans la plupart des cas, vous devez éviter de créer une liaison à un seul serveur. Active Directory prend en charge les liaisons sans serveur (comme l'indique l'exemple précédent). Ainsi, il n'est pas nécessaire de spécifier un serveur si vous accédez à Active Directory dans le domaine de l'utilisateur qui a ouvert une session. Lors de la demande de liaison, ADSI recherche le contrôleur de domaine Windows 2000 dans le domaine de l'utilisateur qui a ouvert une session.
4 Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives Création d'unités d'organisation Vous pouvez désormais utiliser l'objet domaine pour créer d'autres objets, tels que des unités d'organisation. Vous devez créer l'unité d'organisation Human Resources. L'exemple de code utilisé pour créer l'objet unité d'organisation est le suivant : Set ou_hr = Domain.Create("organizationalUnit", "OU=Human Resources") ou_hr.put "Description", "Human Resources" ou_hr.setinfo La méthode Create accepte le nom de la classe et celui du nouvel objet. À ce stade, l'objet n'est pas enregistré dans Active Directory. Cependant, il existe une référence objet ADSI/COM sur le client. L'objet ADSI vous permet de définir ou de modifier les attributs à l'aide de la méthode Put. Celle-ci accepte le nom et la valeur de l'attribut. Cependant, aucun objet n'est enregistré dans l'annuaire. Ils sont tous mis en cache côté client. Lorsque vous appelez la méthode SetInfo, les modifications (en l'occurrence, la création des objets et la modification des attributs) sont enregistrées dans Active Directory. Ces modifications sont traitées par la transaction : soit vous voyez le nouvel objet avec tous ses attributs, soit vous ne voyez pas l'objet. Ouvrez la console Utilisateurs et ordinateurs Active Directory pour vérifier que les objets de l'unité d'organisation apparaissent. Création de comptes d'utilisateur Vous devez désormais créer des utilisateurs dans l'unité d'organisation. L'exemple de code utilisé pour créer un utilisateur est le suivant : Set usr = ou_hr.create("user", "CN=James Smith") usr.put "samaccountname", "jasmith" usr.put "userprincipalname", "jasmith" & "@" & Domain.Get("name") usr.accountdisabled = False usr.setinfo usr.setpassword "password" usr.setinfo Notez que vous devez spécifier l'attribut samaccountname. Il s'agit d'un attribut obligatoire de la classe d'utilisateur. Avant de créer une instance d'un objet, vous devez définir tous les attributs obligatoires. L'attribut samaccountname du compte d'utilisateur permet d'ouvrir une session à partir des ordinateurs exécutant Microsoft Windows 95, Microsoft Windows 98 ou Microsoft Windows NT. Les ordinateurs exécutant Windows 2000 prennent en charge l'attribut samaccountname. Cependant, si le client et le contrôleur de domaine exécutent tous deux Windows 2000, vous pouvez ouvrir une session en utilisant le nom d'utilisateur principal. Dans cet exemple, le nom d'utilisateur principal de James est jasmith@domaine. Si James change de domaine au sein de la forêt, il peut continuer à utiliser son nom d'utilisateur principal.
Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives 5 Vous activez le compte d'utilisateur en attribuant la valeur FALSE (faux) à la propriété AccountDisabled. Les administrateurs peuvent également affecter un mot de passe à l'aide de la méthode SetPassword. Cependant, cette méthode ne fonctionne que si l'objet a été créé dans l'annuaire. Avant de définir le mot de passe de l'utilisateur, vous devez appeler la méthode SetInfo. Remarque L'exemple de code utilisé pour créer un groupe est le suivant : Set Users = GetObject("LDAP://CN=USERS," & DomainPath) Set grp = Users.Create("group", "CN=HR Admins") grp.put "samaccountname", "HRadmins" grp.setinfo Sur la première ligne, l'objet ADSI est affecté au conteneur Users. Le groupe HR Admins est ensuite créé dans ce conteneur. samaccountname est un attribut obligatoire qui permet de fournir une compatibilité descendante. Dans cet exemple, les outils de Microsoft Windows NT version 4.0, tels que le Gestionnaire des utilisateurs, sont capables de distinguer HRadmins de HR Admins. Dans cet atelier, le script ne crée par les objets individuellement, comme l'indiquent les exemples précédents, mais extrait les noms d'utilisateur d'un fichier texte et crée plusieurs objets en utilisant une boucle.
6 Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives Exercice 1 Création d'objets à l'aide d'adsi Dans cet exercice, vous allez utiliser un script pour créer l'unité d'organisation Human Resources et plusieurs comptes d'utilisateur dans cette unité. Les noms d'utilisateur et les fonctions seront copiés dans le script à partir d'un fichier texte. Tâche 1. Ouvrez le fichier Users.txt et créez cinq utilisateurs en respectant la convention employée pour les trois utilisateurs existants. 2. Étudiez, testez et vérifiez le script Cr_user.vbs. Détails a. Ouvrez le fichier Users.txt situé dans le dossier Appendix du CD-ROM du stagiaire. b. Ajoutez cinq utilisateurs à la fin du fichier texte en respectant le format suivant : username:project Lead:Full Name c. Enregistrez le fichier dans le répertoire C:\ADSI (que vous aurez préalablement créé), puis fermez le Bloc-notes. a. Cliquez avec le bouton droit sur Cr_user.vbs dans le dossier Appendix, puis cliquez sur Modifier. b. Étudiez le code annoté, notamment les sections pouvant être personnalisées afin de répondre à vos besoins. c. Fermez le Bloc-notes. d. Double-cliquez sur Cr_user.vbs, puis cliquez sur OK sur les messages de l'environnement d'exécution de scripts Windows qui s'affichent. e. Ouvrez la console Utilisateurs et ordinateurs Active Directory, puis vérifiez que tous les comptes d'utilisateur ont été créés dans l'unité d'organisation Human Resources.
Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives 7 Exercice 2 Modification d'objets à l'aide d'adsi Dans cet exercice, vous allez utiliser un script pour modifier plusieurs comptes d'utilisateur de l'unité d'organisation. Les noms d'utilisateur et les fonctions seront copiés dans le script à partir d'un fichier texte. Tâche 1. Ouvrez le fichier Users.txt, modifiez plusieurs fonctions, puis enregistrez le fichier sous Change.txt. 2. Étudiez, testez et vérifiez le script Mod_user.vbs. Détails a. Ouvrez le fichier Users.txt situé dans le dossier C:\ADSI b. Transformez les fonctions de Project Lead en Project Manager en respectant le format suivant : username:project Manager c. Enregistrez le fichier sous C:\ADSI\Change.txt puis, fermez le Bloc-notes. a. Cliquez avec le bouton droit sur Mod_user.vbs dans le dossier Appendix, puis cliquez sur Modifier. b. Étudiez le code annoté, notamment les sections pouvant être personnalisées afin de répondre à vos besoins. c. Fermez le Bloc-notes. d. Double-cliquez sur Mod_user.vbs, puis cliquez sur OK sur les messages de l'environnement d'exécution de scripts Windows qui s'affichent. e. Ouvrez la console Utilisateurs et ordinateurs Active Directory, puis vérifiez que les comptes d'utilisateur ont été modifiés dans l'unité d'organisation Human Resources.
8 Annexe E : Programmation à l'aide d'une interface ADSI pour automatiser les tâches administratives Exercice 3 Suppression d'objets à l'aide d'adsi Dans cet exercice, vous allez utiliser un script pour supprimer plusieurs comptes d'utilisateur de l'unité d'organisation. Les noms d'utilisateurs seront copiés dans le script à partir d'un fichier texte. Tâche 1. Ouvrez le fichier Change.txt, enlevez les noms d'utilisateur que vous ne souhaitez pas supprimer, puis enregistrez le fichier sous Remove.txt. 2. Étudiez, testez et vérifiez le script Del_user.vbs. Détails a. Ouvrez le fichier Change.txt situé dans le dossier C:\ADSI b. Modifiez le fichier pour ne garder que les noms d'utilisateur à supprimer en respectant le format suivant : username c. Enregistrez le fichier sous Remove.txt, puis fermez le Bloc-notes. a. Cliquez avec le bouton droit sur Del_user.vbs dans le dossier Appendix, puis cliquez sur Modifier. b. Étudiez le code annoté, notamment les sections pouvant être personnalisées afin de répondre à vos besoins. c. Fermez le Bloc-notes. d. Double-cliquez sur Del_user.vbs, puis cliquez sur OK dans l'un des messages de l'environnement d'exécution de scripts Windows qui s'affichent. e. Ouvrez la console Utilisateurs et ordinateurs Active Directory, puis vérifiez que les comptes d'utilisateur ont été supprimés dans l'unité d'organisation Human Resources.