locked
recherche dans les sous OU RRS feed

  • Question

  • Bonjour,

    Avec le script suivant la rechercher des users se fait dans l'OU désigné.
    Cependant j'aimerais que la recherche inclus les sous OU.
    A part passer par la fonction ADO dont je n'arrive pas du tout à intégrer dans mon script, y-a-t'il une autre solution ?.
    Sinon merci de me dire comment intégrer la recherche dans les sous OU du script suivant :
    **************************************************************************************************************
    On Error Resume Next

    Set Root = GetObject("LDAP://RootDSE")
    DomainPath = Root.Get("DefaultNamingContext")

    'msgbox "root "& DomainPath

    DataFile = "c:\MovedUsers.txt"

    ouIAMstaging="ou=iam,ou=Eleves,Ou=Utilisateurs de LTECG-PEDA"

    Set objOU=GetObject("LDAP://"&ouIAMstaging&"," & DomainPath)
    wscript.echo objOU
    objOU.Filter=Array("user")

    set FSO = CreateObject("Scripting.fileSystemObject")
    Set wshShell = WScript.CreateObject("Wscript.Shell")
    set file=FSO.CreateTextfile(DataFile, true)

    'For Each objUser in objOU

    '******Account******
       userLogonName = ""
       userPreWindows= ""
      
    '******Organization
       userClass=""
        
    'wscript.echo "--- > user : " & objUser.Get("SAMAccountName")

       userLastName   = objUser.Get("sn")
       userFirstName  = objUser.Get("givenName")
       userUntis      = objUser.Get("physicalDeliveryOfficeName")
       userLogonName  = split(objUser.Get("userPrincipalName"),"@")(0)
       userPreWindows = objUser.Get("SAMAccountName")  
       userClass      = objUser.Get("department")
       userMatricule  = objUser.Get("company")
       userUntis      = objUser.Get("physicalDeliveryOfficeName")

      
       userData =            "     Nom : " & userLastName & vbCrlf
       userData = userData & "  Prénom : " & userFirstName & vbCrlf
       userData = userData & "   Untis : " & userUntis & vbCrlf
       userData = userData & "   Login : " & userLogonName & vbCrlf
       userData = userData & "PréLogin : " & userPreWindows & vbCrlf
       userData = userData & " Profile : " & userProfile & vbCrlf
       userData = userData & "  Folder : " & userFolder & vbCrlf
       userData = userData & "  Classe : " & userClass & vbCrlf
       userData = userData & "Matricule: " & UserMatricule & vbCrlf
       userData = userData & "Untis    : " & UserUntis & vbCrlf

       if userCLASS <> "" then

           userMemberOf = ""
               found = 0
           userMemberOf = objUser.GetEx("MemberOf")    
           For Each Line In userMemberOf
                Group=""
                Group = split(split(Line,",")(0),"=")(1)
                    if userClass = Group then found=1
           Next
               if found = 0 then
              data =  "-----> " & userPreWindows & ": " & Group & " " & userClass
              wscript.echo data
              file.writeLine data
              'wshShell.Run "cscript deplace.vbs "& userClass &" "
               end if
           
       end if
    'next
    msgbox "The End"
    ****************************************************************************************************************************************
    Merci d'avance pour votre aide.
    Cordailement
    • Déplacé swapnilpBanned jeudi 4 février 2010 01:07 Forum Consolidation (Origine :Windows Server 2003 – Services d’Annuaire)
    vendredi 1 août 2008 13:37

Réponses

  • Bonjour,

    Merci.

    J'ai finalement trouver la solution de recherche dans les sous OU, merci Pierre.
    Comme j'ai une OU par classes (30), je dois préciser toutes le OUs.

    Comment faire pour les lire à partir d'un fichier texte ?.

    Voilà le début de script avec 2 OUs :
    ********************************************************
    On Error Resume Next

    Set Root = GetObject("LDAP://RootDSE")
    DomainPath = Root.Get("DefaultNamingContext")

    'msgbox "root "& DomainPath

    DataFile = "c:\MovedUsers.txt"

    'ouIAMstaging="ou=iam,ou=Eleves,Ou=Utilisateurs de LTECG-PEDA"

    OUS = Array("ou=iam,ou=Eleves,Ou=Utilisateurs de LTECG-PEDA,DC=ltecg-peda,DC=lu", _
    "ou=iam2,ou=iam,ou=Eleves,Ou=Utilisateurs de LTECG-PEDA,DC=ltecg-peda,DC=lu")

    For Each OU in OUS

    Set objOU = GetObject("LDAP://" & OU)

    .................
    **************************************************************

    Quelqu'un  à une idée ?.

    Cordialement.
    mercredi 13 août 2008 05:57

Toutes les réponses

  • bonjour hbenk,

     

    a vue d'oeil, en simplifiant je dirais, modifier ton script pour:

     

    faire une liste des sous Ou à partir de ton Ou de depart (un array.OU par exemple)

    for each OU in array.OU

    faire une liste des users dans l'ou (ce que tu fais actuellement)

    faire ton traitement

    passer à l'Ou suivante jusqu'à la derniere de l'Array

     

    simplifié mais je pense qu'en partant de ton script actuel , et en faisant une boucle sur les OU/Sous OU, tu obtiendras ton résultat.

     

     

    Cordialement,

     

    PierrE.

     

     

     

     

    vendredi 1 août 2008 16:35
  • Bonjour Pierre,

    Merci pour ta réponse.

    Quelle est la syntaxe pour intégrer l'array.ou ?.
    Dois déclarer les noms des sous OU ?.
    Je suis novice en vbscript.

    Cordialement.
    mardi 12 août 2008 10:29
  • Bonjour,

     

    voici un exemple de recherche :

     

    - Attention à la ligne qui se continue sur la ligne suivante

    - Supprimer la condition (name="+User+") pouf rechercher tous les utilisateurs dans les OUs

    Code Snippet

    Fonction de recherche d’un utilisateur dans AD

    (ici pour accéder à l’attribut « DisplayName »)

     

     

    Function GiveFullName(user)

    Dim oRootDSE 'As IADs

    Dim strDomainNC 'As String

    Dim oUser

     

    Set oRootDSE = GetObject("LDAP://RootDSE")

    strDomainNC = oRootDSE.Get("defaultNamingContext")

    'msgbox(StrDomainNC)

     

    Set oConnection = CreateObject("ADODB.Connection")

    oConnection.Provider = "ADsDSOObject"

    oConnection.Open "ADs Provider"

     

    Set oRecordset = oConnection.Execute("<LDAP://"+StrDomainNC+">;(&(objectCategory=user)(name="+user+"));name,displayname;subtree")

    If Not oRecordset.EOF Then

        While Not oRecordset.EOF

             Affiche=oRecordset.Fields("name")

                     if isnull(oRecordset.Fields("displayname")) Then

               GiveFullName=""

             else

               GiveFullName=oRecordset.Fields("displayname")

               exit function

             end if

             oRecordset.movenext

        Wend

    End If

     

    end function

     

     

    A+

    mardi 12 août 2008 12:29
  • Bonjour,

    Merci.

    J'ai finalement trouver la solution de recherche dans les sous OU, merci Pierre.
    Comme j'ai une OU par classes (30), je dois préciser toutes le OUs.

    Comment faire pour les lire à partir d'un fichier texte ?.

    Voilà le début de script avec 2 OUs :
    ********************************************************
    On Error Resume Next

    Set Root = GetObject("LDAP://RootDSE")
    DomainPath = Root.Get("DefaultNamingContext")

    'msgbox "root "& DomainPath

    DataFile = "c:\MovedUsers.txt"

    'ouIAMstaging="ou=iam,ou=Eleves,Ou=Utilisateurs de LTECG-PEDA"

    OUS = Array("ou=iam,ou=Eleves,Ou=Utilisateurs de LTECG-PEDA,DC=ltecg-peda,DC=lu", _
    "ou=iam2,ou=iam,ou=Eleves,Ou=Utilisateurs de LTECG-PEDA,DC=ltecg-peda,DC=lu")

    For Each OU in OUS

    Set objOU = GetObject("LDAP://" & OU)

    .................
    **************************************************************

    Quelqu'un  à une idée ?.

    Cordialement.
    mercredi 13 août 2008 05:57
  • Hello,

     

    tu peux utiliser le script de recherche que je t'ai indiqué en remplaçant "Objectcategory=User" par "ObjectClass=OrganizationalUnit" pour chercher l'information directement dans AD.

    => En plus, ce sera dynamique en cas de création, renommage ou suppression de classe!!!

     

    Tu peux ajouter une condition dans LDAP "Name="*eleves*" pour n'avoir que les OUs souhaitées...

    Ou réaliser cela avec des tests classiques dans VbScript.

     

    A bientôt,

     

     

     

    mercredi 13 août 2008 07:35
  • Bonjour,

    Le soucis avec votre solution je dois refaire tout mon script (de plus il fonctionne bien), comme je ne suis pas fort en vbscript je n'ai pas envie de repasser des jours à le remodeler.

    Les classes change rarement.

    J'aimerais juste intégrer un fichier texte contenant la liste des classes en colonnes, afin d'éviter de taper tous les DN.

    Ce script me sert uniquement à savoir si un élève à changé de classe en cours d'année.

    Si vous pouvez me dire comment injecter une liste d'OU via un fichier texte je vous en serez reconnaisssant.

    Encore merci.

    Cordialement.

    PS : J'ai essaié cela mais ca ne fonctionne pas :

    Const ForReading = 1

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTextFile = objFSO.OpenTextFile _
        ("W:\_IAM\OU.txt", ForReading)

    strText = objTextFile.ReadAll
    objTextFile.Close

    arrOUs = Split(strText, vbCrLf)

    For Each strOU in arrOUs

    mercredi 13 août 2008 07:53