IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Problème de modification des attributs d'un utilisateur dans Active Directory


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Problème de modification des attributs d'un utilisateur dans Active Directory
    Bonjour à tous,
    je voudrais normaliser le champ nom (qui est en fait le champ nom complet) dans mon active directory mais j'ai une erreur dans mon script vbs car il ne veut pas modifier CN qui sert à identifier l'utilisateur avec le protocole LDAP.
    Donc je ne sais pas comment il faut faire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    '************************** VARIABLES SYSTEMES **************************
    Dim user, computer
    Dim u,v,w
    Dim oRootDSE,strDomainNC
    Dim oConnection,oRecordset
    ' ------------------------------------- DEBUT DE PROGRAMME -------------------------------------------
     
    Sub recuperation_donnees()
    ' Recherche du domaine Active Directory courant, on peut aussi forcer la valeur !
    Set oRootDSE = GetObject("LDAP://RootDSE")
    strDomainNC = oRootDSE.Get("defaultNamingContext")
     
    ' Connexion de type base de donnée à Active Directory
    Set oConnection = CreateObject("ADODB.Connection")
    oConnection.Provider = "ADsDSOObject"
    oConnection.Open "ADs Provider"
    Dim nom_complet, prenom
    ' Définition de la recherche principale
    ' Tous les utilisateurs dans tous les niveaux de l?arborescence.
    Set oRecordset = oConnection.Execute("<GC://"+StrDomainNC+">;(&(objectCategory=user));distinguishedName,sn,givenName,name,displayname,samaccountname;subtree")
     
    ' Boucle sur les enregistrements.
    If Not oRecordset.EOF Then
    While Not oRecordset.EOF
     
    ' Attention les champs vides (Null) ne peuvent pas être concaténés en chaine de caractères
    ' Il faut donc les vérifier
    'stokage des variables réutilisables
    nom_LDAP=verifyNULL(oRecordSet.Fields("distinguishedName"))
    nom_famille=VerifyNull(oRecordset.Fields("sn"))
    'nom_complet=VerifyNull(oRecordset.Fields("name"))
    prenom=VerifyNull(oRecordset.Fields("givenName"))
    samaccountname=VerifyNull(oRecordset.Fields("samaccountname"))
     
    If (nom_famille="" or prenom="") Then
    nom_LDAP = "erreur"
    Else
    nom_complet = normalisation_nom_prenom (nom_famille,prenom)
    res=UpdateAccount(nom_LDAP, nom_complet, samaccountname)
    End If
     
    oRecordset.movenext
    Wend
    End If
    End Sub
     
    Function UpdateAccount(nom_chemin, nom_complet, samaccountname)
    Dim oUser
    wscript.echo nom_chemin
    set oUser=GetObject("LDAP://"+nom_chemin)
    samaccountname=ouser.samaccountname
    nom=oUser.sn
    prenom=oUser.givenname
    DisplayName=Trim(oUser.DisplayName)
    'Récupération du login, nom, prénom et NomComplet !!!
    'Si les conditions sont remplies, on pourra définir la nouvelle valeur
    NewFullName=nom_complet
    'Puis réécrire l'information modifiée dans Active Directory :
    oUser.put "cn", NewFullName
    oUser.setinfo
    UpdateAccount=1
    End Function
     
    ' Fonctions...
     
    Function VerifyNull(field)
    IF not (isnull(Field)) Then
    VerifyNull=Field
    Else
    VerifyNull=""
    End IF
    End Function
     
    Function normalisation_nom_prenom(nom, prenom)
    nb = len(prenom)
    prenom = UCASE(LEFT(prenom,1)) & LCASE(RIGHT(prenom,nb-1)) 'prends la première lettre
    nom = UCASE(nom)
    nom_complet = nom & " " & prenom
    'wscript.echo "prenom " & prenom
    wscript.echo "Nom complet : " & nom & " " & prenom
    normalisation_nom_prenom=nom_complet
    End Function
     
    recuperation_donnees()
    Merci d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mars 2006
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    C'est bon j'ai réussi après 4 heures de boulot !
    Voici le code pour les interressés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    Dim user, computer
    Dim u,v,w
    Dim oRootDSE,strDomainNC
    Dim oConnection,oRecordset
     
    Sub recuperation_donnees()
    	' Recherche du domaine Active Directory courant
    	Set oRootDSE = GetObject("LDAP://RootDSE")
    	strDomainNC = oRootDSE.Get("defaultNamingContext")
    	' Connexion de type base de donnée à Active Directory
    	Set oConnection = CreateObject("ADODB.Connection")
    	oConnection.Provider = "ADsDSOObject"
    	oConnection.Open "ADs Provider"
    	Dim nom_complet, prenom
    	'On recherche tous les utilisateurs dans tous les niveaux de l’arborescence.
    	Set oRecordset = oConnection.Execute("<GC://"+StrDomainNC+">;(&(objectCategory=user));distinguishedName,sn,givenName,name,displayname,samaccountname;subtree")
     
    	' Boucle sur les enregistrements.
    	If Not oRecordset.EOF Then
    		While Not oRecordset.EOF
    		' Les champs vides ne peuvent pas être concaténés
    		nom_LDAP=VerificationNul(oRecordSet.Fields("distinguishedName"))
    		nom_complet_actuel=VerificationNul(oRecordSet.Fields("name"))
    		nom_famille=VerificationNul(oRecordset.Fields("sn"))
    		prenom=VerificationNul(oRecordset.Fields("givenName"))
    		If (nom_famille=""  or prenom="") Then
    			nom_LDAP = "erreur"
    			Else 
    			nom_complet = normalisation_nom_prenom (nom_famille,prenom)
    			if NOT (nom_complet = nom_complet_actuel) then
    				res=MiseAJourCompte(nom_LDAP, nom_complet_actuel, nom_complet)
    			End If
    		End If
    		oRecordset.movenext
    		Wend
    	End If
    End Sub
     
    'fonction permettant de faire le changement
    Function MiseAJourCompte(n_LDAP, n_c_actuel, n_complet)
    	'modification du nom_complet pour obtenir la LDAP de l'OU
    	pour_OU="CN=" & n_c_actuel & "," 'remise dans le contexte pour connaitre la longueur de la chaine
    	nb=len(n_LDAP)-len(pour_OU)
    	'on retire la partie CN=Nom_Utilisateur,
    	pour_OU=Right(n_LDAP, nb)
    	'wscript.echo "nombre " & nb & " n_LDAP " & n_LDAP & " LDAP_OU " & pour_OU
    	fin = "CN=" & n_complet
    	Set objNewUser = GetObject("LDAP://"& pour_OU)
    	Set objMoveUser = objNewUser.MoveHere ("LDAP://" & n_LDAP, fin)
     
    	UpdateAccount=1
    End Function
     
    'fonction permettant de vérifier si le champ est nul ou pas
    Function VerificationNul(champ)
      If not (isnull(champ)) Then
        VerificationNul=champ
      Else
        VerificationNul=""
      End If
    End Function
     
    'fonction permettant de normaliser le nom complet suivant la politique d'annuaire
    Function normalisation_nom_prenom(nom, prenom)
    	nb = len(prenom)
    	prenom = UCASE(LEFT(prenom,1)) & LCASE(RIGHT(prenom,nb-1)) 'prends la première lettre
    	nom = UCASE(nom)
    	nom_complet = nom & " " & prenom
    	'wscript.echo "Nom complet : " & nom & " " & prenom
    	normalisation_nom_prenom=nom_complet
    End Function 
     
    'fonction replace ne fonctionne pas en VBS !
    Function Remplacer(ancienne_chaine, a_replacer, remplacement)
    	Dim pos
    	s = s & ""
    	pos = InStr(s, Str1)
    	While pos > 0
    	s = Mid(s, 1, pos - 1) & Str2 & Mid(s, pos + Len(Str1))
    	pos = InStr(pos, s, Str1)
    	Wend
    	Remplacer = s
    End Function 
     
    Function Supprimer(ancienne_chaine, a_supprimer)
    	Dim pos
    	s = s & ""
    	pos = InStr(s, Str1)
    	While pos > 0
    	s = Mid(s, 1, pos - 1) & Mid(s, pos + Len(Str1))
    	pos = InStr(pos, s, Str1)
    	Wend
    	Supprimer = s
    End Function 
     
    recuperation_donnees()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2015, 14h35
  2. Réponses: 1
    Dernier message: 26/11/2009, 14h15
  3. Réponses: 5
    Dernier message: 26/11/2008, 11h03
  4. Réponses: 8
    Dernier message: 06/07/2007, 08h03
  5. [VBS] recherche OU d'un utilisateur dans Active directory
    Par Amandine62 dans le forum VBScript
    Réponses: 7
    Dernier message: 16/02/2006, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo