IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

[vbs][Active Directory] Détection de doublons. Problème d'affichage MsgBox si plus de deux.


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [vbs][Active Directory] Détection de doublons. Problème d'affichage MsgBox si plus de deux.
    Bonjour,
    Le script ci-dessous recherche les doublons de numéros de radiomessagerie (Pager) déclarés pour tous les utilisateurs dans l'AD.
    En cas de doublon les informations des utilisateurs concernés sont affichées dans un même MsgBox, jusque-là tous va bien.
    Mon souci est lorsqu'un numéro de radiomessagerie et attribué a plus de deux utilisateurs, les infos ne sont pas afficher dans le même MsgBox.
    Si par exemple trois utilisateurs on le même numéro un premier MsgBox m'affiche les deux premiers utilisateurs et un second MsgBox m'affiche les trois.
    Pouvez-vous m'aider?
    Bien Cordialement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    ' DuplicatePagers.vbs
    ' 
    ' Recherche des numméros de radiomessagerie "pager" non unique dans Active Directory.
    '
    ' ----------------------------------------------------------------------
    '
    'Ce VBScript utilise ADO pour rechercher dans Active Directory les objets utilisateur. 
    'Le jeu d’enregistrements est trié par numéros de radiomessagerie et les valeurs en double sont de sortie.
    'Ce VBScript est conçu pour s’exécuter avec  l'invite de commandes "hôte Cscript". 
    'La sortie peut être redirigée vers un fichier texte. Par exemple :
    'cscript //nologo DuplicatePagers.vbs > Duplicates.txt
     
     
    Option Explicit
     
    Dim objRootDSE, strDNSDomain, adoCommand, adoConnection, strQuery
    Dim adoRecordset, strPager, strPreviousPager, strDN, strPreviousPath, strResult
    Dim blnFlag, strBase, strFilter, strAttributes
     
    ' Déterminer le nom de domaine DNS de l’objet RootDSE.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDNSDomain = objRootDSE.Get("defaultNamingContext")
     
    ' Utilisation d’ADO pour rechercher dans Active Directory.
    Set adoCommand = CreateObject("ADODB.Command")
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "ADsDSOObject"
    adoConnection.Open "Active Directory Provider"
    adoCommand.ActiveConnection = adoConnection
     
    ' Recherchez tous les objets utilisateur. 
    ' retourne le nom d'utilsateur et le N° de radiomessagerie.
    ' Rapport de tri mis par N°.
    strBase = "<LDAP://" & strDNSDomain & ">"
    strFilter = "(&(objectCategory=person)(objectClass=user))"
    strAttributes = "distinguishedName,pager"
    strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
    adoCommand.CommandText = strQuery
    adoCommand.Properties("Page Size") = 100
    adoCommand.Properties("Timeout") = 30
    adoCommand.Properties("Cache Results") = False
    adoCommand.Properties("Sort On") = "pager"
    Set adoRecordset = adoCommand.Execute
    If (adoRecordset.EOF = True) Then
        Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
        Wscript.Quit
    End If
     
    ' Effectuer une boucle sur tous les utilisateurs.  
    ' Afficher les utilisateurs avec un N° qui n’est pas unique.
     
    strPreviousPager = ""
    strPreviousPath = ""
    strResult = ""
     
    blnFlag = False
    Do Until adoRecordset.EOF
        strDN = adoRecordset.Fields("distinguishedName").Value
        strPager = adoRecordset.Fields("pager").Value
        If (strPager = strPreviousPager) Then
            If (blnFlag = False) Then
    			strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf
            End If
            	strResult = strResult + strDN & vbCrLf
            	MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."          
            blnFlag = True
        Else    
            blnFlag = False
        End If
     
        strPreviousPager = strPager
        strPreviousPath = strDN
        strResult = strResult
        adoRecordset.MoveNext
     
    Loop
    adoRecordset.Close
     
    ' Clean up.
    adoConnection.Close

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Bonjour,

    Je crois qu'il faut sortir la ligne 65 de la boucle Do Until .....Loop
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par l_autodidacte Voir le message
    Bonjour,

    Je crois qu'il faut sortir la ligne 65 de la boucle Do Until .....Loop
    Bonjour,
    J'ai tenté de sortir mon MsgBox juste après ma boucle et n'ai plus de boucle, juste l'affichage du premier doublon trouvé.
    Je ne vois pas ou sortir !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il me semble que l'on ne peut pas sortir d'une boucle et relancer une nouvelle itération simplement en VBS (équivalent à "continue" en C).
    Peut-être en utilisant goto et d'un label?
    Je ne sais pas trop comment gérer mon problème!

  5. #5
    Membre chevronné Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Par défaut
    Bonjour,

    Peut-être qu'en modifiant légèrement la boucle "Do" de cette manière ça peut répondre à tes attentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Do Until adoRecordset.EOF
        strDN = adoRecordset.Fields("distinguishedName").Value
        strPager = adoRecordset.Fields("pager").Value
        If (strPager = strPreviousPager) Then
            If (blnFlag = False) Then
    			strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf & strDN & vbCrLf
    			 blnFlag = True
            Else
            	strResult = strResult + strDN & vbCrLf
    		End If
        Else
    		If (blnFlag = True) Then
    			MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."
    			blnFlag = False
            End If
        End If
     
        strPreviousPager = strPager
        strPreviousPath = strDN
        strResult = strResult
        adoRecordset.MoveNext
     
    Loop

  6. #6
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Peut-être avec les modifications que j'ai effectuées, cela marchera.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    ' DuplicatePagers.vbs
    ' 
    ' Recherche des numméros de radiomessagerie "pager" non unique dans Active Directory.
    '
    ' ----------------------------------------------------------------------
    '
    'Ce VBScript utilise ADO pour rechercher dans Active Directory les objets utilisateur. 
    'Le jeu d’enregistrements est trié par numéros de radiomessagerie et les valeurs en double sont de sortie.
    'Ce VBScript est conçu pour s’exécuter avec  l'invite de commandes "hôte Cscript". 
    'La sortie peut être redirigée vers un fichier texte. Par exemple :
    'cscript //nologo DuplicatePagers.vbs > Duplicates.txt
     
     
    Option Explicit
     
    Dim objRootDSE, strDNSDomain, adoCommand, adoConnection, strQuery
    Dim adoRecordset, strPager, strPreviousPager, strDN, strPreviousPath, strResult
    Dim blnFlag, strBase, strFilter, strAttributes
     
    ' Déterminer le nom de domaine DNS de l’objet RootDSE.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDNSDomain = objRootDSE.Get("defaultNamingContext")
     
    ' Utilisation d’ADO pour rechercher dans Active Directory.
    Set adoCommand = CreateObject("ADODB.Command")
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "ADsDSOObject"
    adoConnection.Open "Active Directory Provider"
    adoCommand.ActiveConnection = adoConnection
     
    ' Recherchez tous les objets utilisateur. 
    ' retourne le nom d'utilsateur et le N° de radiomessagerie.
    ' Rapport de tri mis par N°.
    strBase = "<LDAP://" & strDNSDomain & ">"
    strFilter = "(&(objectCategory=person)(objectClass=user))"
    strAttributes = "distinguishedName,pager"
    strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
    adoCommand.CommandText = strQuery
    adoCommand.Properties("Page Size") = 100
    adoCommand.Properties("Timeout") = 30
    adoCommand.Properties("Cache Results") = False
    adoCommand.Properties("Sort On") = "pager"
    Set adoRecordset = adoCommand.Execute
    REM If (adoRecordset.EOF = True) Then
        REM Wscript.Echo "Aucun numéro de radiomessagerie en double trouvé"
        REM Wscript.Quit
    REM End If
    ' ##### Moi je mettrais : 
       adoRecordset.MoveFirst
           '##### car le branchement sur la base de données peut se faire n'importe où et notamment si c'est à la fin
           '##### on arrête Wscript(donc tout le traitement qui suit ne sera jamais exécuté)
     
    ' Effectuer une boucle sur tous les utilisateurs.  
    ' Afficher les utilisateurs avec un N° qui n’est pas unique.
     
    strPreviousPager = ""
    strPreviousPath = ""
    strResult = ""
     
    blnFlag = False
    Do Until adoRecordset.EOF
        strDN = adoRecordset.Fields("distinguishedName").Value
        strPager = adoRecordset.Fields("pager").Value
        If (strPager = strPreviousPager) Then
            If (blnFlag = False) Then
                strResult = "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf
            End If
            strResult = strResult + strDN & vbCrLf
            REM MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."          
            blnFlag = True
        Else    
            blnFlag = False
        End If
     
        strPreviousPager = strPager
        strPreviousPath = strDN
        'strResult = strResult ' car inutile
        adoRecordset.MoveNext
     
    Loop
     ' ICI l'endroit où on peut voir le résultat tout entier de la recherche :
       MsgBox (strResult), vbExclamation ,"Doublon de N° de Radiomessagerie."  
     
       ' Clean up.
     
        adoRecordset.Close
        adoConnection.Close
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ligne 66
    Code vbs : Sélectionner tout - Visualiser dans une fenêtre à part
    strResult = strResult + "Le N° " & strPreviousPager & " est attribué aux l'utilisateurs: " & vbCrLf & strPreviousPath & vbCrLf

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/06/2017, 08h38
  2. Problème d'affichage sous SQL*Plus
    Par boutheinanabeul dans le forum Sql*Plus
    Réponses: 10
    Dernier message: 14/03/2017, 22h47
  3. Détection de cercle, problème d'affichage
    Par Leanaa dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 26/06/2012, 09h42
  4. Réponses: 2
    Dernier message: 13/02/2007, 12h13
  5. [VBS]Active directory et VBScript
    Par dibeloni dans le forum VBScript
    Réponses: 2
    Dernier message: 16/01/2006, 09h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo