locked
script changement d'attribut sur plusieurs utilisateur AD RRS feed

  • Question

  • Bonjour,

    Je cherche un script pour mettre à jour le champ : Company de tout mes utilisateurs présent dans l'AD.

    Quelque un a une solution ?

    Merci et bonne journée

    JB
    • Modifié samzor vendredi 20 février 2009 11:11
    • Déplacé swapnilpBanned jeudi 4 février 2010 00:57 Forum Consolidation (Origine :Windows Server 2003 – Services d’Annuaire)
    lundi 16 février 2009 11:17

Réponses

  • Tiens tu sais si il serait possible de mettre dans le champ " Office " le nom de l'ou parente à celle ou il se trouve ?


    Style : ou Direction et Finance -> 2230 - Bureau du personnel -> Utilisateur.

    Et moi je voudrais que dans l'attribut " Office " de l'utilisateur le script mette " Direction et Finance ".

    Personne pour m'aider ?

    Bon je me suis débrouillé tout seul.

    Je poste le script pour d'autre si jamais =)

        dim accent,sansAccent,st_email,office  
          
     
    set oCommand=createObject("ADODB.command")      
        set oConnection=createObject("ADODB.connection")          
          
        accent = " ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç" 
        sansAccent = "-AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"     
          
          
              
        oConnection.provider="ADsDSOObject"      
        oConnection.open"Active Directory Provider"      
        oCommand.activeConnection=oConnection      
        set oRootDse=getObject("LDAP://RootDSE")      
        sBase="<LDAP://"&oRootDse.get("defaultNamingContext")&">;"      
        sFilter="(&(objectClass=user)(objectCategory=person));"      
        sAttributes="ADsPath;"      
        sScope="subtree"      
        sQuery=sBase&sFilter&sAttributes&sScope      
        oCommand.commandText = sQuery      
              
        oCommand.properties("Page Size")=100      
              
        oCommand.properties("Timeout")=30      
              
        oCommand.properties("Cache Results")=false      
              
        set oRecordSet=oCommand.execute      
              
        do until oRecordSet.eOF      
              
          sADsPath=oRecordSet.fields("ADsPath")      
          set oUser=getObject(sADsPath)      
          st_email = lcase(oUser.givenName) &"." & lcase(oUser.sn) & "@company.com"      
          for i=0 to len(accent) step 1  
            st_email  =Replace(st_email,right(left(accent,i),1),right(left(sansAccent,i),1))   
          next  
          oUser.put "mail", st_email  
          oUser.setinfo()    
          
          userDName = oUser.distinguishedName     
          partie = split(UserDName,",")  
          OU = Right(partie(1),Len(partie(1))-3)            
          oUser.put "department", OU           
     
          if (left(partie(2),2)="OU") then  
            office = Right(partie(2),Len(partie(2))-3)            
              else  
            office = Right(partie(1),Len(partie(1))-3)            
          end if  
              oUser.put "PhysicalDeliveryOfficeName", office   
          oUser.setinfo()    
          
          oRecordSet.moveNext      
              
        loop      
              
    oConnection.close   
    • Marqué comme réponse samzor lundi 23 février 2009 09:44
    vendredi 20 février 2009 10:00

Toutes les réponses

  • Bonjour,

    si tu es dans un AD 2003, tu as la possibilité de sélectionner tous les comptes utilisateurs de ton choix et faire un clique droit/Propriétés pour modifier les attributs affichés en une seule opération.

    Autrement, tu as l'outil admodify.net : http://www.codeplex.com/admodify (c'est un outil graphique)

    Ou bien encore admod (ligne de commande)

    Ou bien encore via ldifde ou csvde + fichier CSV à générer.

    Bon j'arrête là :D
    Freddy ELMALEH aka "bigstyle" -- Consultant Freelance pour Active IT -- MVP Windows Server - Directory Services
    • Marqué comme réponse samzor lundi 16 février 2009 12:09
    • Non marqué comme réponse samzor lundi 16 février 2009 12:19
    • Marqué comme réponse samzor lundi 16 février 2009 12:19
    • Non marqué comme réponse samzor lundi 16 février 2009 12:25
    • Proposé comme réponse Thierry DEMAN-BARCELÒMVP lundi 16 février 2009 22:02
    lundi 16 février 2009 11:48
  • super =)

    Merci de cette réponse super rapide.

    Bonne journée
    • Marqué comme réponse samzor lundi 16 février 2009 12:09
    • Non marqué comme réponse samzor lundi 16 février 2009 12:09
    lundi 16 février 2009 11:56
  • Je t'en prie, content de t'avoir aidé.

    Tu peux indiquer mon post précédent en tant que "réponse" afin que le forum y gagne en lisibilité s'il te plait ?

    Merci et bonne journée
    Freddy ELMALEH aka "bigstyle" -- Consultant Freelance pour Active IT -- MVP Windows Server - Directory Services
    • Marqué comme réponse samzor lundi 16 février 2009 12:09
    • Non marqué comme réponse samzor lundi 16 février 2009 12:09
    lundi 16 février 2009 12:02
  • Ah ben tiens pendant que je t'ai sous la main :D

    Tu as pas un script pour créé un email en prenant le nom.prenom@company.com.

    Et qu'il me parse ça sur l'entier de l'AD ?

    Je sais j'abuse xD
    lundi 16 février 2009 12:10
  • Tu peux passer par une stratégie de destinataire au niveau de ton exchange du type
    %s.%g@societe.com

    %g : given name (Prénom)
    %s : le "Surname" qui correspond au "last name" ou nom de famille si tu préfères ;)

    @+


    Freddy ELMALEH aka "bigstyle" -- Consultant Freelance pour Active IT -- MVP Windows Server - Directory Services
    lundi 16 février 2009 13:34
  • ok pour moi


    Freddy ELMALEH aka "bigstyle" -- Consultant Freelance pour Active IT -- MVP Windows Server - Directory Services
    lundi 16 février 2009 22:19
  • Salut =)

    Hmm j'ai essayé et quand je met %s.%g@societe.com il me met %s.%g.@societe.com dans l'email.

    As-tu une idée ?

    Merci de l'info xD
    mercredi 18 février 2009 07:32
  • Bon ben j'ai fait autrement. J'ai demandé à un développeur de ma boîte de me coder le script qui prend le nom.prenom@société.com.

    Je peux diffuser le source si quelque un en a besoin.

    Bonne journée

    JB
    mercredi 18 février 2009 09:45
  • Bonjour,

    tu veux dire quelque chose comme ça ;)

    1 set oCommand=createObject("ADODB.command")    
    2 set oConnection=createObject("ADODB.connection")    
    3     
    4 oConnection.provider="ADsDSOObject"    
    5 oConnection.open"Active Directory Provider"    
    6 oCommand.activeConnection=oConnection    
    7 set oRootDse=getObject("LDAP://RootDSE")    
    8 sBase="<LDAP://"&oRootDse.get("defaultNamingContext")&">;"    
    9 sFilter="(&(objectClass=user)(objectCategory=person));"    
    10 sAttributes="ADsPath;"    
    11 sScope="subtree"    
    12 sQuery=sBase&sFilter&sAttributes&sScope    
    13 oCommand.commandText = sQuery    
    14     
    15 oCommand.properties("Page Size")=100    
    16     
    17 oCommand.properties("Timeout")=30    
    18     
    19 oCommand.properties("Cache Results")=false    
    20     
    21 set oRecordSet=oCommand.execute    
    22     
    23 do until oRecordSet.eOF    
    24     
    25   sADsPath=oRecordSet.fields("ADsPath")    
    26       
    27   set oUser=getObject(sADsPath)    
    28       
    29   oUser.put "mail", oUser.givenName &"." & oUser.sn & "@compagnie.com" 
    30   oUser.setinfo()  
    31       
    32   oRecordSet.moveNext    
    33     
    34 loop    
    35     
    36 oConnection.close   


    Joël
    mercredi 18 février 2009 10:09
  • Ah parfait. Ben tiens, tant que tu es sur cette lancée, c'est possible de me faire un script qui mettrait le nom de l'ou ou se trouve l'utilisateur dans le champ" service " dans l'onglet organisation .

    PS : Mes OU ont des parenthèses des accents et des tirets .

    Merci =)
    mercredi 18 février 2009 11:45
  • Concernant ma proposition j'ai modifié mon post et elle est possible via une stratégie de destinataires dans ton Exchange
    Freddy ELMALEH aka "bigstyle" -- Consultant Freelance pour Active IT -- MVP Windows Server - Directory Services
    mercredi 18 février 2009 13:19
  • Tu peux dans la boucle récuperer la chaine distinguishedName et récuperer l'OU parente (c'est assez élegant mais ça dépanne) :

    serDName = oUser.distinguishedName     
     
    partie = split(UserDName,",")      
    OU = Right(partie(1),Len(partie(1))-3)      
        
    oUser.put "company", OU     
    oUser.setinfo()    

    Joël
    mercredi 18 février 2009 14:31
  • set oCommand=createObject("ADODB.command")     
        set oConnection=createObject("ADODB.connection")     
             
        oConnection.provider="ADsDSOObject"     
        oConnection.open"Active Directory Provider"     
        oCommand.activeConnection=oConnection     
        set oRootDse=getObject("LDAP://RootDSE")     
        sBase="<LDAP://"&oRootDse.get("defaultNamingContext")&">;"     
        sFilter="(&(objectClass=user)(objectCategory=person));"     
        sAttributes="ADsPath;"     
        sScope="subtree"     
        sQuery=sBase&sFilter&sAttributes&sScope     
        oCommand.commandText = sQuery     
             
        oCommand.properties("Page Size")=100     
             
        oCommand.properties("Timeout")=30     
             
        oCommand.properties("Cache Results")=false     
             
        set oRecordSet=oCommand.execute     
             
        do until oRecordSet.eOF     
             
          sADsPath=oRecordSet.fields("ADsPath")     
               
          set oUser=getObject(sADsPath)     
      
     
            serDName = oUser.distinguishedName      
      
            partie = split(UserDName,",")       
            OU = Right(partie(1),Len(partie(1))-3)       
         
            oUser.put "department", OU      
            oUser.setinfo() 
               
               
          oRecordSet.moveNext     
             
        loop     
             
        oConnection.close   



    Ca ressemble à ça ?

    Oulà, je suis pas du tout developpeur... Je comprends pas grand chose.

    Peux-tu me pondre le script ?

    J'avoue que j'ai de la peine dans le scripting.

    Merci
    jeudi 19 février 2009 07:20
  •  Bon ben je suis définitivement nul en scripting xD

    ça ne fonctionne pas j'ai une erreur.

    "

    indice en dehors de la plage '[number: 1]'



    Helllllp les guru coderz =)
    • Modifié samzor jeudi 19 février 2009 10:38
    jeudi 19 février 2009 10:22
  • Salut,

    il y a une coquille dans mon texte, voici le bon :

    userDName = oUser.distinguishedName        
        
    partie = split(UserDName,",")         
    OU = Right(partie(1),Len(partie(1))-3)         
           
    oUser.put "company", OU        
    oUser.setinfo()       
     
     
        

    Joël
    • Proposé comme réponse Joel de amorin vendredi 20 février 2009 07:54
    • Marqué comme réponse samzor vendredi 20 février 2009 08:38
    • Non marqué comme réponse samzor lundi 23 février 2009 07:35
    jeudi 19 février 2009 10:35
  • T'es un dieu =) merci tout fonctionne.

    Encore merci !!
    jeudi 19 février 2009 10:42
  • Bonjour,

    content d'avoir pu t'aider. Tu peux indiquer ton post comme résolu.
    A+
    Joël
    vendredi 20 février 2009 07:53
  • Tiens encore un truc, ton script construit les emails en prenant les accents dans l'email...

    Peux-tu faire en sorte que l'email soit en minuscule ?

    Merci
    vendredi 20 février 2009 09:01
  • Salut,

    oUser.put "mail", Lcase(oUser.givenName &"." & oUser.sn & "@compagnie.com"


    Joël
    • Marqué comme réponse samzor vendredi 20 février 2009 10:00
    • Non marqué comme réponse samzor lundi 23 février 2009 07:35
    • Non marqué comme réponse samzor lundi 23 février 2009 07:37
    vendredi 20 février 2009 09:41
  • Tiens tu sais si il serait possible de mettre dans le champ " Office " le nom de l'ou parente à celle ou il se trouve ?


    Style : ou Direction et Finance -> 2230 - Bureau du personnel -> Utilisateur.

    Et moi je voudrais que dans l'attribut " Office " de l'utilisateur le script mette " Direction et Finance ".

    Personne pour m'aider ?

    Bon je me suis débrouillé tout seul.

    Je poste le script pour d'autre si jamais =)

        dim accent,sansAccent,st_email,office  
          
     
    set oCommand=createObject("ADODB.command")      
        set oConnection=createObject("ADODB.connection")          
          
        accent = " ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç" 
        sansAccent = "-AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"     
          
          
              
        oConnection.provider="ADsDSOObject"      
        oConnection.open"Active Directory Provider"      
        oCommand.activeConnection=oConnection      
        set oRootDse=getObject("LDAP://RootDSE")      
        sBase="<LDAP://"&oRootDse.get("defaultNamingContext")&">;"      
        sFilter="(&(objectClass=user)(objectCategory=person));"      
        sAttributes="ADsPath;"      
        sScope="subtree"      
        sQuery=sBase&sFilter&sAttributes&sScope      
        oCommand.commandText = sQuery      
              
        oCommand.properties("Page Size")=100      
              
        oCommand.properties("Timeout")=30      
              
        oCommand.properties("Cache Results")=false      
              
        set oRecordSet=oCommand.execute      
              
        do until oRecordSet.eOF      
              
          sADsPath=oRecordSet.fields("ADsPath")      
          set oUser=getObject(sADsPath)      
          st_email = lcase(oUser.givenName) &"." & lcase(oUser.sn) & "@company.com"      
          for i=0 to len(accent) step 1  
            st_email  =Replace(st_email,right(left(accent,i),1),right(left(sansAccent,i),1))   
          next  
          oUser.put "mail", st_email  
          oUser.setinfo()    
          
          userDName = oUser.distinguishedName     
          partie = split(UserDName,",")  
          OU = Right(partie(1),Len(partie(1))-3)            
          oUser.put "department", OU           
     
          if (left(partie(2),2)="OU") then  
            office = Right(partie(2),Len(partie(2))-3)            
              else  
            office = Right(partie(1),Len(partie(1))-3)            
          end if  
              oUser.put "PhysicalDeliveryOfficeName", office   
          oUser.setinfo()    
          
          oRecordSet.moveNext      
              
        loop      
              
    oConnection.close   
    • Marqué comme réponse samzor lundi 23 février 2009 09:44
    vendredi 20 février 2009 10:00