Modifier un champ dans active directory et déplacement d'un pc d'une ou vers une autre, avec adsi et ldap

Soyez le premier à donner votre avis sur cette source.

Vue 14 549 fois - Téléchargée 894 fois

Description

Comme il n'y a pas beaucoups d'exemple traitant de la modif d'Active Directory via LDAP et ADSI en Delphi sur le net. Je mets à dispo cette petite Unit, afin d'apporter un peu d'aide sur le sujet. :-)

Petite Unit pour :
- Modifier le champ 'description' d'un PC dans Active Directory (Put).
- Deplacement d'un PC d'une OU vers une autre (MoveHere) avec ADSI et LDAP.

Utilise activeds.dll, installé avec Win 2000 et Win XP.
On trouve ActiveDs_TLB.pas sur le Net.

Source / Exemple :


//----------------------------------------------------------------------------------//
// Unite pour gérer AD. Crée le 21/02/05, par stef_cch@yahoo.fr    //
// Dernière modif le 21/02/05.                                                          //
//----------------------------------------------------------------------------------//

unit LibADSI;

interface

uses
  SysUtils,
  Variants,
  Dialogs,

  ComObj, ActiveX,

  ActiveDs_TLB;  //ADSI

//------------------------------------------------------------------------------
function ADsGetObject(lpszPathName: PWideChar; const riid: TGUID; out obj): HResult; stdcall; external 'activeds.dll';
function ADsOpenObject(lpszPathName: PWideChar; lpszUserName: PWideChar; lpszPassword: PWideChar; dwReserved: LongInt; const riid: TIID; out obj): HResult; stdcall; external 'activeds.dll';

function  MOVE_ordi_ds_ActiveDirectory(nom_PC_a_deplacer : string; Type_de_PC : integer): string;
function  Change_Description_PC_ADSI ( nom_ordi_a_modif,descript : string) : string;  	// Modification de la description du PC ds Active Directory

//------------------------------------------------------------------------------

implementation

//------------------------------------------------------------------------------
function  MOVE_ordi_ds_ActiveDirectory(nom_PC_a_deplacer : string; Type_de_PC : integer): string;
const MAX_car = 255;
var
  UnknownObj: IUnknown;
  container : IADsContainer;

  nom_pc_loc, ou_dest_loc : string;
  myUser, myPassword : string;
  SourceName, DestName, NewName : String;

begin
  myUser        := 'DOMAIN\LOGIN' ;
  myPassword    := 'PWD' ;

  nom_pc_loc  := nom_PC_a_deplacer; 

  DestName   := 'LDAP://NomServeur/OU=' + ou_dest_loc + ',OU=...,DC=...,DC=...,DC=...';
  SourceName := 'LDAP://NomServeur/CN=' + nom_pc_loc  + ',OU=OU_SOURCE,DC=...,DC=...,DC=...';
  NewName    := ''; //'CN=NOUVEAU_NOM_PC_A_DEPLACER';

    try
      //OleCheck(ADsGetObject(StringToOleStr(DestName), IID_IADs, UnknownObj));                   //connextion sans authentifications
      OleCheck(	AdsOpenObject(	StringToOleStr(DestName), 
				StringToOleStr(myUser), 
				StringToOleStr(myPassword), 0, IID_IADsContainer, UnknownObj)); 	//avec authentif

      container := UnknownObj as IADsContainer;

      container.MoveHere( StringToOleStr(SourceName), StringToOleStr(NewName) ); //Deplace et renomme

    except
      on E: EOleException do begin ShowMessage('Source = ' + E.Source + ' Message = ' + E.Message); end;
    end;

end;
//------------------------------------------------------------------------------
function Change_Description_PC_ADSI ( nom_ordi_a_modif,descript : string) : string;  // Modif la description du PC ds Active Directory
const MAX_car = 255;
var
  UnknownObj: IUnknown;
  obj : IAds;

  myUser, myPassword, nom_pc, DestName : string;

begin

  nom_pc        := nom_ordi_a_modif; 
  DestName      := 'LDAP://NomServeur/CN=' + nom_pc + ',OU=...,DC=...,DC=...,DC=...';

  myUser        := 'DOMAIN\LOGIN' ;
  myPassword    := 'PWD' ;

    try
     
      //ADsGetObject(StringToOleStr(DestName), IID_IADs, UnknownObj);                     	//connextion sans authentifications
      OleCheck(	AdsOpenObject(	StringToOleStr(DestName), 
				StringToOleStr(myUser), 
				StringToOleStr(myPassword), 0, IID_IADs, UnknownObj)); 	//avec authentifications

      obj := UnknownObj as IADs;

      obj.Put('description', descript);  //met dans un tampon
      obj.SetInfo;                       //valide la valeur du tampon ds AD. Si Get avant SetInfo Alors cela efface le Put

      result := obj.get('description');

    except
      on E: EOleException do begin ShowMessage('Source = ' + E.Source + ' Message = ' + E.Message); end;
    end;

end;
//------------------------------------------------------------------------------

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_hendrix
Messages postés
69
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
18 novembre 2008
1 -
Merci pour toutes ces infos !!!

C'est marrant, mais on dirait qu'on est que deux que le sujet AD intéresse :-) !

@+
g2loq
Messages postés
10
Date d'inscription
vendredi 12 juillet 2002
Statut
Membre
Dernière intervention
15 mars 2005
-
Il faut installer ADSI Edit. Tu le trouveras sur le CD d'installation de win2000Pro dans le répertoire support\tools\setup.exe. Une fois l'installation terminé, tu le verras dans Demarrer\Programs\Windows 2000 Support Tools\Tools\ADSI Edit.

Ensuite, moi j'ouvre le repertoire Domain NC[nom serveur],
Puis le Repertoire DC=...,DC=...,DC=...
Puis le repertoire dans le lequel se trouve mon PC c.à.d OU=PCFixe,
Puis click droit sur le PC pour afficher les propriétées. Et je recopi la première ligne PATH 'LDAP://....'

ADSI Edit, sert a connaitre le vrai nom des champs pour faire tes requetes LDAP. Nom qui ne sont pas dans Active Direct. et que tu ne peux pas inventer. :-)

Voilà :-)
cs_hendrix
Messages postés
69
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
18 novembre 2008
1 -
D'aileurs... pendant que j'y suis ....sait on récuperer l'OU d'un poste depuis celui ci ?????
cs_hendrix
Messages postés
69
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
18 novembre 2008
1 -
Bonjour,

Bon, tout se compile très bien, mais quand je veux me connecter à AD j'ai un message d'avertissement.. je ne l'ai pas noté :-( ...
Ceci dit, je suppose que j'ai mal rempli la ligne

DestName := 'LDAP://NomServeur/CN=' + nom_pc + ',OU=...,DC=...,DC=...,DC=...';

car je ne connais que le nom du pc, je ne sais pas quoi mettre dans les autres champs... faut il obligatoirement renseigner l'OU du poste ?
et mettre plusieurs DC ????? (DC= directory controleur je présume ?)... oui je n'y connais pas grand chose en AD comme vous pouvez le constater :-) !!!

Je ne teste que la fonction Change_Description_PC_ADSI pour l'instant, et le message d'erreur que j'ai est retourné par showmessage (Change_Description_PC_ADSI ('toto','test') );

Merci d'avance pour votre aide et vos réponses,

Meilleures salutations !!!!
cs_hendrix
Messages postés
69
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
18 novembre 2008
1 -
Merci beaucoup !! Je vais m'empresser de tester ça !!

SUPER :-) !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.