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 :

Script AD - Ordre croissant


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut Script AD - Ordre croissant
    Bonsoir à tous,

    J'ai actuellement un script permettant de faire l'extraction des comptes administrateurs de l'AD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    On Error Resume Next
     
    Set objGroup = GetObject _
      ("LDAP://cn=Administrateurs,cn=Builtin,dc=developpez,dc=com")
    objGroup.GetInfo
     
    arrMemberOf = objGroup.GetEx("member")
     
    WScript.Echo "Members:"
    For Each strMember in arrMemberOf
        WScript.echo strMember
    Next
    Je me sert de ce script en enregistrant le résultat tous les jours et en comparant ces fichiers (1 jour d'intervalle). Si je constate une différence, alors un mail est automatiquement envoyé indiquant quelles sont les différences (comptes administrateurs ajoutés/modifiés/supprimés).

    Mon problème est que parfois les lignes sont identiques dans mes deux fichiers comparés mais qu'elles ne sont pas dans le même ordre. Ex :

    Fichier1.txt
    Compte1
    Compte2
    Compte3

    Fichier2.txt
    Compte1
    Compte3
    Compte2

    Je souhaite donc que le script ci-dessus puisse réorganiser le résultat dans l'ordre croissant.

    Avez-vous une idée de comment je pourrais faire cela ?

    PS : je ne suis pas du tout adepte du VBScript (ma question le prouve ).

    Bonne soirée et bon week-end à tous.

  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 : 69
    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
    Bonsoir;

    Dans ton cas, il te faut une routine de tri. Les données retournées par
    For Each strMember in arrMemberOf
    WScript.echo strMember
    Next
    seront de préférence redirigées vers un fichier que tu liras par la suite. Un exemple est ce
    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
    Set Fso=CreateObject("Scripting.FileSystemObject")
    Set f=fso.OpenTextFile("C:\TT.txt",1,False)
    s=f.ReadAll
    T = Split(s,VbNewLine)
    n=Ubound(T)
    Tri n,T
    Afficher n,T
    '============================
      Sub Permut(a,b)
           aux = a
           a = b
           b = aux
      End Sub
    '==============================
     
      FUNCTION pos_min(d,f,T)
     
        posmin = d
        FOR j= d+1 TO f 
           IF (T(j)<T(posmin)) THEN
             posmin = j
           End If
        Next
       pos_min =posmin
      End Function
    '=============================
     Sub Tri(m,T)
     
       FOR i = 0 TO (m-1) 
          pm = pos_min(i,m,T)
          If (pm<>i) Then
             permut T(pm),T(i)
          End If
       Next
      End Sub
    '==============================
     
      Sub Afficher(m,T)
       s=""
        For j =0 To m 
          s=s+T(j)+vbnewline
        Next
       MsgBox s
      End Sub
    Tu peux alors adapter en fonction de ton besoin
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    Y a t-il une autre possibilité sans passer par un autre fichier ?

    En effet, pour le moment j'ai un script vbs et un script perl pour mon envoie de mail et faire un diff entre deux fichiers de sorties. Ajouter un fichier supplémentaire à traiter est un peu lourd pour ce que je souhaite faire.

    N'y a t-il pas de fonction définie pour trier dans l'ordre croissant ?

    Merci en tout cas pour ton script qui pourra m'être utile pour un autre contexte.

    Si vous avez une solution pouvant être incluse dans mon script, n'hésitez pas

  4. #4
    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 : 69
    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;

    Au lieu de rediriger le résultat vers un fichier, il y a la possibilité de le mettre dans un tableau; par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim cnt ' cnt est un compteur
    cnt = -1 ' Juste pour commencer à cnt=0
    For Each strMember in arrMemberOf
      If strMember<>"" Then
           cnt=cnt+1
           T(cnt)= strMember
      End If
    Next
    Juste après, tu peux utiliser le script que j'ai envoyé en commençant par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tri cnt,T
    Afficher cnt,T
    sans mettre le début dudit script.
    Si tu veux écrire le résultat dans fichier1.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set Fso=CreateObject("Scripting.FileSystemObject")
    Set f=fso.OpenTextFile("C:\Fichier1.txt",2,True) ' 2 : pour écrire dans le fichier en écrasant son contenu
    Result=Afficher(cnt,T)
    f.Write Result
    f.Close ' ferme et enregistre le fichier
    Dans ce cas de figure, la procédure Afficher doit être modifiée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Afficher(m,T)
       s=""
        For j =0 To m 
        If T(j)<>"" Then  s=s+T(j)+vbnewline
        Next
       Afficher= s
    End Function
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 161
    Par défaut
    Bonjour,

    Merci beaucoup pour le script permettant de trier.

    J'ai adapté en fonction de mes besoins mais cela ne passe pas :

    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
     
    On Error Resume Next
     
    Set objGroup = GetObject _
      ("LDAP://cn=Administrateurs,cn=Builtin,dc=developpez,dc=com")
    objGroup.GetInfo
     
    arrMemberOf = objGroup.GetEx("member")
     
    Dim cnt
    cnt = -1
    For Each strMember in arrMemberOf
      If strMember<>"" Then
           cnt=cnt+1
           T(cnt)= strMember
      End If
    Next
     
    Tri cnt,T
    Afficher cnt,T
     
    '============================
      Sub Permut(a,b)
           aux = a
           a = b
           b = aux
      End Sub
    '==============================
      FUNCTION pos_min(d,f,T)
     
        posmin = d
        FOR j= d+1 TO f 
           IF (T(j)<T(posmin)) THEN
             posmin = j
           End If
        Next
       pos_min =posmin
      End Function
    '=============================
     Sub Tri(m,T)
     
       FOR i = 0 TO (m-1) 
          pm = pos_min(i,m,T)
          If (pm<>i) Then
             permut T(pm),T(i)
          End If
       Next
      End Sub
    '==============================
      Sub Afficher(m,T)
       s=""
        For j =0 To m 
          s=s+T(j)+vbnewline
        Next
       WScript.Echo s
      End Sub
    Une idée ?

    Bonnes fêtes de fin d'année.

    Cdlt,

  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 : 69
    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
    Salut;

    Où est-ce que ça ne passe pas ?

    A mon avis, tu dois mettre en commentaire(ou supprimer) la ligne On Error Resume Next pour voir où se situe l'erreur.
    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

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

Discussions similaires

  1. Tri par ordre croissant
    Par KinF dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 13/12/2008, 20h19
  2. organiser un combobox par ordre croissant??
    Par shadow31 dans le forum MFC
    Réponses: 2
    Dernier message: 18/05/2005, 09h31
  3. Trie par ordre croissant.
    Par slackjayo dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 22/04/2005, 09h41
  4. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 00h04
  5. Ordonner ds l'ordre croissant de 2 champs confondus
    Par Coolbens dans le forum Langage SQL
    Réponses: 11
    Dernier message: 17/06/2003, 16h39

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