Réponse acceptée !
Bonjour,
merci pour ta réponse mais j'ai procédé d'une autre manière : j'ai déplacé l'utilisateur, voici le code :
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 NOT (nom_famille="" or prenom="") Then
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_remplacer, remplacement)
valeur = Instr(chaine, a_remplacer)
'wscript.echo "valeur" & valeur
long_mot = len(a_remplacer)
long_chaine = len(chaine)
valeur_fin= long_chaine - long_mot
remplacer = left (chaine, valeur-1) & remplacement & right(chaine, (long_chaine - (long_mot+valeur))+1)
End Function
Function supprimer(ancienne_chaine, a_supprimer)
valeur = Instr(chaine, mot)
wscript.echo "valeur" & valeur
long_mot = len(mot)
long_chaine = len(chaine)
valeur_fin= long_chaine - long_mot
supprimer = left (chaine, valeur-1) & right(chaine, (long_chaine - (long_mot+valeur))+1)
End Function
recuperation_donnees()