Création d'utilisateur depuis access

Résolu
cs_baloc Messages postés 56 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 29 octobre 2010 - 30 déc. 2008 à 10:31
cs_baloc Messages postés 56 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 29 octobre 2010 - 31 déc. 2008 à 12:15
bien le bonjour à tous, et bonne fête.

je vous expose mon soucis.la création d'utilisateur dans l'ad en vba (oui je suis sadic^^)
Donc après quelque recherche je tombes sur ce que je veux réalisé (en gros j'ai coder)
mais la je reste bloquer sur un point non négligeable. j'ai l'impression qu'il ne valide pas mes données. avec plusieurs erreur de trouvé.

1ère: erreur Automation
    le type d'attribut spécifié au service d'annuaire n'est pas défini.

cette erreur ce trouve au moment de la validation de mes premiers attributs

si je le laisse passé (vive l'apostrophe), j'ai ue 2ème erreur
    erreur Automation
    cette objet ne se trouve pas sur le serveur.

donc celui-ci doit correspondre au faite que je n'ai pas réussi à créer l'utilisateur. Allez pour ce mettre dans le bain je vais mettre mon piti bout de code.

<hr size="2" width="100%" />    Const ADS_SCOPE_SUBTREE = 2
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

    Set objOU = GetObject("LDAP://OU=" & mod2.Value & ",<Ldap domaine>")
    Set objuser = objOU.Create("User", "cn= " & txt2.Value & " " & txt1.Value)

// je vais vous donnez plus d'information sur les variables.
//-txt1:nom
//-txt2:prenom
//-txt3:login
//-txt4:password
//-mod1:script de démarrage
//-mod2:site(les sites sont aussi les noms des OU)
/-lst2:memberof
//toute ses variable sont insérés depuis un formulaire sur access

    objuser.sAMAccountName = txt3.Value
    objuser.sn = txt1.Value
    objuser.givenName = txt2.Value
    objuser.scriptPath = mod1.Value
   
     Do While lst2.Value 'en ce qui concerne la boucle il y en a bien plus
'camon
        If lst2.Value = "80_users" Then
            If group = "" Then
                group = "CN=" & lst2.Value & ",<lien situant le groupe rechercher>"
            Else
                group = group & ",CN=" & lst2.Value & ",<lien situant le groupe rechercher>"
            End If
        End If

    Loop

   objuser.setinfo //ici ce trouve l'erreur 1
   objuser.memberof = group //ici il y a aussi une erreur mais ça je réglerais tout seul un if suffit.
   objuser.SetPassword txt4.Value //ici c'est l'erreur 2
   objuser.AccountDisabled = False //l'erreur 2 ce situe aussi ici
   objuser.setinfo
End Sub
<hr size="2" width="100%" />voilà donc mon problème, un petit coup de pouce sera pas de refus...
mais comme ça m'empeche pas de chercher j'y retourne

bonne journée à tout le monde

et une victoire de plus pour Mr canard

1 réponse

cs_baloc Messages postés 56 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 29 octobre 2010
31 déc. 2008 à 12:15
rebonjour, je tiens à informer que j'ai bien trouver la solution qui se trouve ci dessous
 je vais vous donnez plus d'information sur les variables.
-txt1:nom
-txt2:prenom
-txt3:login
-txt4:password
-mod1:script de démarrage
-mod2:site(les sites sont aussi les noms des OU)
-lst2:memberof
toute ses variable sont insérés depuis un formulaire sur access


<hr size="2" width="100%" />

~~~~~~~connexion à la base de donnée~~~~~~~~~~~~~~

Set objconn = CreateObject("ADODB.Connection") 'Création d'un objet pour la connexion
    objconn.Provider = "ADsDSOObject" 'Définition du pilote de connexion
    objconn.Open "Active Directory Provider" 'Ouverture de la base

    Dim ttab() As String
~~~~~~~~~étant donnée que l'active directory possède une arborescence, lors de la création il faut bien définir le
~~~~~~~~~lien LDAP correspondant
~~~~~~~~~avec mon cas j'ai une arborescence avec 2 groupe possible (noté ldap A et ldap B)
    If InStr(mod2.Value, "[valeur]") = 1 Or InStr(mod2.Value, "[valeur]") = 1 Then
        Set objOU = GetObject("LDAP://OU=utilisateurs,OU=" & mod2.Value & ",ldap A")
    Else
        Set objOU = GetObject("LDAP://OU=utilisateurs,OU=" & mod2.Value & "ldap B")
    End If
~~~~~~~~~création de l'utilisateur et atribution des valeurs
    Set objuser = objOU.Create("User", "cn= " & txt2.Value & " " & txt1.Value)

    objuser.sAMAccountName = txt3.Value
    objuser.setinfo
    objuser.sn = txt1.Value
    objuser.givenName = txt2.Value
    objuser.scriptPath = mod1.Value
    objuser.setinfo
~~~~~~~~~le soucis des memberof c'est quand on risque d'avoir plusieurs groupe de sécurité posssible et leur
~~~~~~~~~position donc par groupe de sécurité il faudra une possibilité de valeur
~~~~~~~~~pour simplifier, on dira que chaque site gardera ses groupes de sécurité
   i = 0
    ttab() = Split(lst2.RowSource, ";")
     Do While i <> lst2.ListCount
'camon
'    instr(ucase(chaine1),ucase(chaine2))=1
        If InStr(ttab(i), "cam") = 1 Then
            Set objGroup = GetObject("LDAP://cn=" & ttab(i) & ",OU=utilisateurs,OU=camon, [ldap A]")
            objGroup.PutEx 3, "member", Array("cn= " & txt2.Value & " " & txt1.Value & ",OU=Utilisateurs,OU=" & mod2.Value & "[ldap A]")
            objGroup.setinfo
        End If


'blissard



    If InStr(ttab(i), "bli") = 1 Then

            Set objGroup = GetObject("LDAP://cn=" & ttab(i) &
",OU=utilisateurs,OU=blissard,[ldap B]")

            objGroup.PutEx 3, "member", Array("cn= " & txt2.Value
& " " & txt1.Value & ",OU=Utilisateurs,OU=" &
mod2.Value &
",[ldap B]")

            objGroup.setinfo



        End If
    i = i + 1
    loop
~~~~~~~~pour le reste des attributs c'est suivant les besoins
~~~~~~~~ici j'avais besoin du display name
~~~~~~~~de cocher "user cannot change password" et "password never change"
~~~~~~~~de mettre un mot de passe
~~~~~~~~et d'activer le compte
    dist = txt2.Value & " " & txt1.Value
    objuser.displayname = dist
    objuser.setinfo
    objuser.userAccountControl = 66112
    objuser.setinfo
    objuser.SetPassword txt4.Value
    objuser.AccountDisabled = False
    objuser.setinfo
 
~~~~~~~~la suite sert à vider les donnée du formulaire.
    txt1.Value = ""
    txt2.Value = ""
    txt3.Value = ""
    txt4.Value = ""
    mod1.Value = ""
    mod2.Value = ""
   
    nbLigne = lst2.ListCount
    cpt = 0
    While cpt < nbLigne
        lst2.RemoveItem (0)
        cpt = cpt + 1
    Wend
   
End Sub


<hr size="2" width="100%" />
cependant, j'ai bien 4 champs textes, 2 champs liste texte et 2 listebox.

voilà, comme je savais pas si ça pouvais être une bonne source je vous laisse le choix de décider.
passez une très bonne journée.
et une victoire de plus pour Mr canard
3
Rejoignez-nous