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 :

comparaison entre données d'un fichier et active directory


Sujet :

VBScript

Vue hybride

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Par défaut comparaison entre données d'un fichier et active directory
    Bonjour à tous,


    Avant de vous exposer mon problème, je vous explique ma situation :
    Je possède une base mysql. De cette base mysql via un script, j'extrais mes utilisateurs dans un fichier au format csv. Ce fichier csv est ensuite traiter via un script vbs afin de mettre les utilisateurs dans un active directory.

    Mon problème est le suivant : lorsque toto est supprimé de ma base mysql, toto est encore présent dans l'active directory.

    je peux supprimer toto via ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set conteneur = GetObject("LDAP://OU=informatique,DC=lan,DC=fr")
    conteneur.Delete "user", "CN=Toto"
    Set conteneur = nothing
    Ce script est utile mais il ne supprima que toto. J'aimerais rendre ce script automatique et qu'il puisse me supprimer tous les utilisateurs en effectuant une comparaison entre mon fichier csv et l'active directory.

    je sais comment lire des données d'un fichier texte mais je ne sais pas comment je dois m'y prendre pour effectuer cette comparaison


    Cordialement



    Stefdu59

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour comparer 2 chaine de caractéres l'opérateur à utiliser est : =



    montre nous ton code de lecture du fichier...

    transforme ton code de destruction d'un utilisateur en procédure avec comme paramètre le nom de l'utilisateur à enlever de ta liste..

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Par défaut
    voici mon code actuellement :
    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
     
    Option Explicit
     
    Dim Fso
    Dim fichier
    Const ForReading = 1
    Dim Ligne
    Dim tableau
    Dim nom
    Dim conteneur
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fichier = fso.OpenTextFile("c:\liste.csv", ForReading)
     
    Do While (Not fichier.AtEndOfStream)
      Ligne = fichier.Readline
      tableau = Split(Ligne, ";")
      Suppr_utilisateur tableau (0)
    Loop
     
    Function Suppr_utilisateur(nom)
    Set conteneur = getObject("LDAP://OU=Informatique,DC=Lan,DC=fr")
    conteneur.Delete "user","CN=" & nom
    End Function
    ce script va supprimer les utilisateurs en fonction des noms qui se trouve dans le fichier mais c'est pas ça mon but.

    mon but étant :
    mon script interroge l'active directory. Pour un utilisateur trouver dans l'ad, il compare cet utilisateur avec les utilisateurs présent dans le fichier csv. Si l'utilisateur n'est pas présent dans le fichier, il est supprimer de l'ad.


    mon script a débuté à l'envers mais je pense être quand même sur la bonne voie ou au moins un début correct. Le soucis c'est que je sais pas comment interrogé mon ad et effectuer une comparaison avec mon fichier



    Stefdu59

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour le test d'existence dans ton fichier csv.. tu pourrai lire ton fichier et le placer dans un dictionnaire (dictionnary).

    http://tahe.developpez.com/web/vbscr...e=page_3#LII-R

    et ensuite :

    L'existence d'une clé peut être testée avec la méthode exists :
    dico.exists("clé") est vrai si la clé "clé" existe dans le dictionnaire

  5. #5
    Membre expérimenté
    Inscrit en
    Mai 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 189
    Par défaut
    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
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fichier = fso.OpenTextFile("c:\liste.csv", ForReading)
    Set objDictionary = CreateObject("Scripting.Dictionary")
     
    'Remplissage d'un dictionnaire d'utilisateurs à comparer
    Do While (Not fichier.AtEndOfStream)
      Ligne = fichier.Readline
      objDictionary.Add Ligne,Ligne
    Loop
     
    ' cheminLDAP indique dans quel chemin LDAP la recherche a lieu
    cheminLDAP=""
    ' le nom de domaine est contenu dans le premier argument
    nomDomaine="monDomaine.com"
     
    'il faut decouper le nom de domaine a chaque '.'
    'pour le formater de la sorte  
    'test.local => dc=test,dc=local
    decoupe=Split(nomDomaine,"." )
    for k=LBound(decoupe) To Ubound(decoupe)-1
           if len(decoupe(k))>0 then  
                cheminLDAP=cheminLDAP + "dc=" + decoupe(k) + ","
    next
    if len(decoupe(Ubound(decoupe)))>0 then  
          cheminLDAP=cheminLDAP + "dc=" + decoupe(Ubound(decoupe))
     
     
    Const ADS_SCOPE_SUBTREE = 2
     
    'l'interogation de AD se fait par ADODB
    'obtenir un objet connexion ADODB
     
    Set objConnection = CreateObject("ADODB.Connection" )
     
    'cree un objet command qui va permetre de faire une requete
    Set objCommand =   CreateObject("ADODB.Command" )
     
    'parametrage de la connexion
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
     
     
    objCommand.Properties("Page Size" ) = 5000
    'indique que la recherche a lieu dans tout le sous arbre du domaine
    objCommand.Properties("Searchscope" ) = ADS_SCOPE_SUBTREE  
    ' La requete LDAP
    On error resume next
    'objectCategory=user pour lister tous les utilisateurs'
    'objectCategory=user pour lister tous les groupes'
    objCommand.CommandText = "SELECT * FROM 'LDAP://"+cheminLDAP+"' WHERE objectCategory='user'"  
    Set objRecordSet = objCommand.Execute
    if Err<>0 then
     Wscript.Echo ("Une erreur s'est produite, vérifier le nom de domaine" )
     exit sub
    end if
    On error goto 0
     
    objRecordSet.MoveFirst
     
    Do Until objRecordSet.EOF
    user = objRecordset.Fields(0).Value
    objRecordSet.MoveNext
    If Not objDictionary.Exists(user) then wscript.echo "Suppression de l'utilisateur : " & user
    Loop
    objConnection.close
    Essaie ce code là, ca devrait t'aider. Il ne supprime rien, il vérifie la comparaison.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 30
    Par défaut
    merci à vous pour votre aide.


    je viens de tester le code pour connexion AD et ça fonction trés bien. Le soucis viens du fichier csv et du dictionnaire.

    mon fichier csv sert à la base a créer mes utilisateurs dans l'active directory. Pour éviter de jongler sur plusieurs fichier csv pour l'ajout et la suppression des utilisateurs, je préférerais utiliser 1 seul et même fichier.

    mon fichier csv est constituer de cette manière :
    nomcomplet;login;nom;prenom;password;ou
    (ou étant l'unité d'organisation où se situe l'utilisateur)

    lors de la requête pour voir si l'utilisateur existe avec le code de Spantemonium, La comparaison avec mon fichier csv ne se fais pas puisque je retrouve des utilisateurs à supprimer alors qu'ils se trouvent dans le fichier


    voici mon script actuel : (pour la connexion au domaine j'ai repris ce que j'avais mis dans mon script de création)

    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
    Option Explicit
     
    'déclaration des variables
    Dim fso
    Dim fichier
    Dim objDictionary
    Const ForReading = 1
    Dim Ligne
    Dim nom
    Dim conteneur
    Dim Root
    Dim DomainPath
    Dim objConnection
    Dim objCommand
    Dim objRecordSet
    Dim user
    Const ADS_SCOPE_SUBTREE = 2
     
    'déclaration du fichier et du dictionnaire
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fichier = fso.OpenTextFile("c:\liste.csv", ForReading)
    Set objDictionary = CreateObject("Scripting.Dictionary")
     
    'boucle pour lire le fichier ligne par ligne et stocker dans le dictionnaire
    Do While (Not fichier.AtEndOfStream)
      Ligne = fichier.Readline
      objDictionary.Add Ligne,ligne
    Loop
     
     'determine le chemin LDAP
    Set Root = GetObject("LDAP://RootDSE")
    DomainPath = Root.Get("DefaultNamingContext")
     
    'Création objetc pour connexion avec active directory
    Set objConnection = CreateObject("ADODB.Connection")
     
    'Création d'objet pour faire la requete sur l'active directory
    Set objCommand = CreateObject("ADODB.Command")
     
    'paramètre de la connexion
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
    objCommand.Properties("Page Size") = 500
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
     
    'requete LDAP
    objCommand.CommandText = "SELECT * FROM 'LDAP://"+DomainPath+"' WHERE objectCategory='user'"
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    Do Until objRecordSet.EOF
    user = objRecordset.Fields(0).Value
    objRecordSet.MoveNext
    If Not objDictionary.Exists(user) then wscript.echo "Suppressions de l'utilisateur : " & user
    Loop
    objConnection.close
     
     
    'fonction pour supprimer l'utilisateur
    Function Suppr_utilisateur(nom)
    Set conteneur = getObject("LDAP://OU=Informatique,DC=lan,DC=fr")
    conteneur.Delete "user","CN=" & nom
    End Function

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Affiche les données que tu met dans ton dictionnaire ... il te faut utiliser le nom comme clef.. et pas la ligne entière..

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut
    Citation Envoyé par stefdu59 Voir le message
    Bonjour à tous,


    Avant de vous exposer mon problème, je vous explique ma situation :
    Je possède une base mysql. De cette base mysql via un script, j'extrais mes utilisateurs dans un fichier au format csv. Ce fichier csv est ensuite traiter via un script vbs afin de mettre les utilisateurs dans un active directory.

    Mon problème est le suivant : lorsque toto est supprimé de ma base mysql, toto est encore présent dans l'active directory.

    je peux supprimer toto via ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set conteneur = GetObject("LDAP://OU=informatique,DC=lan,DC=fr")
    conteneur.Delete "user", "CN=Toto"
    Set conteneur = nothing
    Ce script est utile mais il ne supprima que toto. J'aimerais rendre ce script automatique et qu'il puisse me supprimer tous les utilisateurs en effectuant une comparaison entre mon fichier csv et l'active directory.

    je sais comment lire des données d'un fichier texte mais je ne sais pas comment je dois m'y prendre pour effectuer cette comparaison


    Cordialement



    Stefdu59
    Petite question qui n'a rien à voir avec le sujet...
    Que se passe-t-il si je renomme toto dans l'outil AD ?
    Melle toto épouse Mr. titi ...

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

Discussions similaires

  1. [XL-2007] Comparaison de données sur 2 fichiers différents
    Par panzera dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/09/2014, 10h55
  2. [SP-2010] problème synchronisation entre sharepoint Moss 2010 et l'active directory
    Par babouchka666 dans le forum SharePoint
    Réponses: 0
    Dernier message: 26/07/2010, 17h13
  3. Copie de fichiers sous ACTIVE DIRECTORY
    Par jordan13 dans le forum VBScript
    Réponses: 11
    Dernier message: 06/04/2009, 11h08
  4. Réponses: 6
    Dernier message: 20/11/2008, 20h26
  5. Comparaison de données entre deux arrays
    Par sironimo dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 20/04/2006, 17h44

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