Le champ cn d'un objet active directory est particulier car il concerne et impact le chemin d'accès de l'objet, aussi pour le modifier il ne faut pas modifier un attribut de l'objet mais il faut déplacer l'objet.
Le code ci-dessous expose comment :
Dim varCodeRetour, varMessageErreur
varCodeRetour = RenommerCNObjetAD("CN=NomObjet,CN=Users,DC=mydomain,DC=local","NouveauNomObjet",varMessageErreur)
If varCodeRetour <> 1 Then Wscript.echo "Erreur : " & varMessageErreur
Public Function RenommerCNObjetAD(ByVal CheminLDAPObjetAD, ByVal NouveauNom, ByRef ErreurDesc)
'Version du 25/09/2009
'En entrée :
'CheminLDAPObjetAD : attend une chaine du type : CN=NomDeLobjet,OU=MonOU,Dc=Mon,DC=Domaine,DC=Com
'NouveauNom : nouveau nom de l'objet. Exemple : LeNouveauNom
'ErreurDesc : Si il y a une erreur, cette variable retourne sa description
'Retourne 1 si le CN de l'objet AD a été modifié
'Retourne 0 si non
Dim NumeroErreur
Dim objAD
Dim ObjParent
Dim OldsAMAccountName
RenommerCNObjetAD = 0
If (Len(CheminLDAPObjetAD) > 0) Then
'Connexion a l objet
Err.Clear
On Error Resume Next
Set objAD = GetObject("LDAP://" & CheminLDAPObjetAD)
NumeroErreur = Err.Number
ErreurDesc = "Impossible de se connecter a l objet."
On Error GoTo 0
If (NumeroErreur = 0) Then
'Connexion à l 'objet parent de l objet
Err.Clear
On Error Resume Next
Set ObjParent = GetObject(objAD.Parent)
NumeroErreur = Err.Number
ErreurDesc = "Impossible de se connecter au parent de l objet."
On Error GoTo 0
If (NumeroErreur = 0) Then
'Renommage du CN de l objet
Err.Clear
On Error Resume Next
Call ObjParent.MoveHere("LDAP://" & objAD.distinguishedName, "cn=" & NouveauNom)
NumeroErreur = Err.Number
'ErreurDesc = "Impossible de renommer le CN de l objet."
ErreurDesc = "Impossible de renommer le CN de l objet : " & Err.Desciption
On Error GoTo 0
If (NumeroErreur = 0) Then
RenommerCNObjetAD = 1
ErreurDesc = ""
End If
Set ObjParent = Nothing
End If 'If (NumeroErreur = 0) Then
End If 'If (NumeroErreur = 0) Then
Else
ErreurDesc = "Le chemin d acces a l objet est vide"
End If 'If (Len(CheminLDAPObjetAD) > 0) Then
End Function
Lien vers le fichier : cliquez ici