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 :

recupe d'info dans l'ad


Sujet :

VBScript

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 55
    Points
    55
    Par défaut recupe d'info dans l'ad
    bonjour a tous,

    Mon objectif est chaque utilisateur de l'AD dont le compte expire dans un mois soit prévenu soit prévenu du nombre de jour qu'il lui reste avant que son compte soit désactivé!

    voici mon code

    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
     
     
    Set WshNet = CreateObject("WScript.Network")
    User = WshNet.Username
     
    Set objDSE = GetObject("LDAP://nomduserdns.nomdudomaine.local/dc=nomdudomaine,dc=local" )'(est ce bien la bonne facon de le noter?)
    set oConnection = CreateObject("ADODB.Connection" )
    oConnection.Provider = "ADsDSOObject"
    oConnection.Open "ADs Provider"  
     
    ' ci dessous le filtre sur le login utilisateur  
    sFilter = "(&(objectclass=user)(samaccountname=" & User & " ))"
     
    ' dans cette ligne, on défini les paramètres récupéré : ici AccountExpirationDate
    ' c'est celle ci que vous pouvez modifier en fonction des paramètres ADSI à récupérer (paramètre avant subtree, séparé par des virgules)
     
    sQuery = "LDAP://nomduserdns.nomdudomaine.local/dc=nomdudomaine,dc=local" & objDSE.Get("defaultNamingContext") & ">;" & sFilter & ";distinguishedName;subtree"
    Set oRecordSet = oConnection.Execute(sQuery)
     
    ' on inscrit le cn dans une variable, et voilà
     
    usrCN = oRecordset.Fields("distinguishedName").value
    Set objUser = GetObject (usrCN)
     
    dtmAccountExpiration = objUser.AccountExpirationDate
     
    If Err.Number <> -2147467259 Or dtmAccountExpiration <> "1/1/1970" Then
        MsgBox "Votre compte expire le : " & objUser.AccountExpirationDate, vbExclamation, "Avertissement"
    End If
    Mon érreur est en ligne 15

    la propiété n'est pas présente dans le cache

    je pense que l'erreur viens du fait que soit le scrypte n'arrive pas a chercher l'information demande, soit elle est mal traité apres avoir été récupéré!

    merci a ceux qui peuvent m'aider

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Je ne fais pas de AD, mais j'ai remarqué deux ou trois chose que tu peux essayer.

    1) remplace les ';' par des ',' ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sQuery = "<LDAP://" & objDSE.Get("defaultNamingContext") & ">;" & sFilter & ";distinguishedName;subtree"2)
    Je crois que la méthode execute ne prend en paramètre qu'une requête SQL (ce n'est pas ce que tu fais). Regarde ici, il y a un exemple VB6.
    http://www.developpez.net/forums/showthread.php?t=58832

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set test = con.Execute("SELECT un, Name, title, telephoneNumber From 'LDAP://DC=lassonde, DC=COM' WHERE objectClass='user' AND objectCategory='Person'", lRecordAffected, ErrNumber, ErrDescription)
    Sur la page tu verras du code avec des Dim toto As quelquechose, ne prends pas peur la déclaration des variables n'est pas identique en VB6 et en VBS.

    3) J'ai trouvé une page avec des exemples de codes, si cela peut t'aider :
    http://msdn2.microsoft.com/en-us/library/ms676870.aspx
    C'est l'aide MSDn, dans le menu sur la gauche tu as tout ce qu'il faut, mais je ne suis pas sur que tu t'y retrouveras en tant que débutant

    4) voilà je reposte ce qu'il y a d'important dans ma réponse.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    effectivement, je comprend pas tout a ce qui y a ecrit sur ces pages,

    sinon y a beaucoup de theorie mais rien qui me dis ou modifier mon script

    un ptit truc qui peut ptet aider et ce script que j'ai fait et qui fonctionne mais qui me donne la date de validite de 1 utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Set WshNet = CreateObject("WScript.Network")
    User = WshNet.Username
     
    Set objUser = GetObject ("LDAP://cn=bidon roger,ou=test,dc=mjs,dc=local")
     
    dtmAccountExpiration = objUser.AccountExpirationDate
     
    If dtmAccountExpiration <> "01/01/1601 02:00:00" Then
        MsgBox "Votre compte expire le : " & objUser.AccountExpirationDate, vbExclamation, "Avertissement"
    End If
    celui ci fonctionne, je comprend pas pkoi il est si court par rapport a l'autre.

    meme en comparant les 2 j'arrive pas a comprendre pkoi ca marche pas.

    ++

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Salut,

    a mon avis, ton second script ne doit pas fonctionner correctement car tu ne reprends pas ta variable User dans ta requete LDAP, je la jouerai comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set objUser = GetObject ("LDAP://cn=" & user & ",ou=test,dc=mjs,dc=local")
    sinon ton get object pointera toujours sur "Bidon Roger"....

    Sinon, va voir l'article "How Can I Determine When an Active Directory User Account will Expire?" des scripting guys, tout le code est très bien expliqué.

    http://www.microsoft.com.nsatc.net/t...5/hey0718.mspx


    A++
    Plus tu pédales moins vite, moins t'avances plus vite.

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set WshNet = CreateObject("WScript.Network")
    User = WshNet.Username
     
    Set objUser = GetObject ("LDAP://cn=" & user & ",ou=test,dc=mjs,dc=local")
     
    dtmAccountExpiration = objUser.AccountExpirationDate
     
    If dtmAccountExpiration <> #01/01/1601 02:00:00# Then
        MsgBox "Votre compte expire le : " & objUser.AccountExpirationDate, vbExclamation, "Avertissement"
    End If
    Essaye ceci.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    ok merci

    je pense effectivement que ca doit fonctionner comme ca

    une derniere question car je ne trouve pas d'info pour ca sur le net

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WshNet = CreateObject("WScript.Network")
    User = WshNet.Username
    ca ca determine que User = l'username de la personne

    existe t'il la meme chose pour l'OU de la personne?
    du genre

    OuUser = wshnet.ou

    merci de vos reponses en tout cas

  7. #7
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Attention,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set WshNet = CreateObject("WScript.Network")
    User = WshNet.Username
    te renvoie l'équivalent de la variable d'environnement USERNAME, ce n'est pas une valeur extraite de l'active directory ou du LDAP.

    Si tu veux retrouver l'OU, tu peux passer par ADSPATH dans le LDAP :

    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
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
     
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = 2
     
    strUser = "toto"
     
    objCommand.CommandText = "SELECT Name, ADsPath FROM 'LDAP://dc=fabrikam,dc=com' where name='" & strUser & "*' and objectCategory='user'"
    Set objRecordSet = objCommand.Execute
     
    If objRecordSet.RecordCount > 0 Then
       MsgBox objRecordSet.Fields("ADsPath").Value
       ObjRecordSet.MoveNext
    End If
    Change fabrikam par ton domaine et toto par le nom à rechercher.

    A++
    Plus tu pédales moins vite, moins t'avances plus vite.

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    j'avoue que je ne comprend pas tout a ton scrypt.

    selon ce que tu dis pour le nom d'utilisateur pas besoin d'aller le chercher dans l'ad, on le prend en local.
    c pour ca que 2 lignes suffise.

    pour l'OU apperement il faut absolument aller le chercher dans l'ad et ca explique la longeur du scrypt.

    Mais ou dois placer ce scrypt par rapport o reste de mon prog

    et je n'ai pas non plus compris par quoi je devais remplacer toto, est ce ma variable qui me sert pour le nom c a dire User ou autre chose?

    ton prog me donne le distingueshed name complet pour l'utilisateur mis a la place de toto

    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
     
     
    Set WshNet = CreateObject("WScript.Network")
    User = WshNet.Username
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
     
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = 2
     
    strUser = "User"
     
    objCommand.CommandText = "SELECT Name, ADsPath FROM 'LDAP://dc=mjs,dc=local' where name='" & strUser & "*' and objectCategory='user'"
    Set objRecordSet = objCommand.Execute
     
    If objRecordSet.RecordCount > 0 Then
       MsgBox objRecordSet.Fields("ADsPath").Value
       ObjRecordSet.MoveNext
       End If
    j'ai essaye de rajouter la variable user mais la je n'ai plus de reponse du tout

    si j'arrive deja a afficher le distingueshed name de l'utilisateur courant j'aurais fait un grand pas deja, apres je n'aurais plus qu'a prendre un objet de ce distingueshed name afin de l'afficher et le tour est joue.

    mais le gros probleme vient surtout du fait de pouvoir prendre les données de l'utilisateur en cours et non de 1 defini en particulier.

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Un peu de cour de prog :
    Ceci est une variable, en VBS son type est variant. Il sera fixé au moment de l'affectation.

    Affecter une valeur à une variable ce fait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto = "une chaine de caractère quelquconque"
    Dans ce cas toto est une chaine de caractère, si tu voulais affecter un entier c'est ainsi :
    Si tu veux que toto prenne la valeur de tata une autre variable il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim toto
    dim tata
    tata = 2
    toto = tata
    Dans ce cas la toto et tata valent 2
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    ok

    c bien ce que je pensais
    j'ai donc fait ca

    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
     
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
     
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = 2
     
    objCommand.CommandText = "SELECT Name, ADsPath FROM 'LDAP://dc=mjs,dc=local' where name='" & strUser & "*' and objectCategory='user'"
    Set objRecordSet = objCommand.Execute
    If objRecordSet.RecordCount > 0 Then
     
    Set WshNet = CreateObject("WScript.Network")
    User = WshNet.Username
     
    strUser = "User"
     
    ' on inscrit le cn dans une variable, et voilà
     
    usrCN = objRecordSet.Fields("ADsPath").Value
    Set objUser = GetObject (usrCN)
     
    End If
     
     
    dtmAccountExpiration = objUser.AccountExpirationDate
     
    If dtmAccountExpiration <> "01/01/1601 02:00:00" Then
        MsgBox "Votre compte expire le : " & objUser.AccountExpirationDate, vbExclamation, "Avertissement"
    End If
    alors now ce que je comprend pas, c que la fin du scrypt marchait avant et indiquait la bonne date, alors que la il me dis dans tout les cas que mon compte expire le 01/01/1601 a 1h

    je continue de chercher, je sens que j'y suis presque lol.

    en tout cas merci a vous et si kkun a une idée sur ce qui se passe je suis preneur!

    ++

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Bon je crois que mon explication n'était pas suffisante.

    Donc reprenons :
    Si tu veux que toto prenne la valeur de tata une autre variable il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim toto
    dim tata
    tata = 2
    toto = tata
    Dans ce cas la toto et tata valent 2

    Peut être aurais je du rajouter qu'avec le code ci-dessous toto est égale à la chaine de caratère tata :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim toto
    dim tata
    tata = 2
    toto = "tata"
    En VBS on utilise les "" pour siganler que ce qui se trouve entre les " est du texte.
    Donc l'interpréteur du script lui lorsqu'il voit toto = "tata" il comprend que tu veut que toto est pour valeur la chaine de caractère tata.
    Par contre avec toto = tata, il comprend que toto doit avoir la même valeur que tata et dans ce cas là toto = 2 parce que tata = 2

    Donc je voulais te faire comprendre que si tu veux que strUser possède la même valeur que User tu doit faire :
    Et pas :
    Car avec un tel code ton script va rechercher dans AD un utilisateur dénommé "User" et non un utilisateur ayant comme dénomination la valeur retourné par WshNet.Username

    J'espère avoir été assez clair ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 75
    Points : 55
    Points
    55
    Par défaut
    oui tout a fait

    donc voila mon petit scrypt marche a la perfection

    il ne renvoie pas de message si ton compte n'expire jamais et te renvoie la date a partir de laquelle il n'est plus bon si il expire un jour!

    voila le code pour ceux que ca interesse !

    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
     
     
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection
     
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = 2
     
     
     Set WshNet = CreateObject("WScript.Network")
    User = WshNet.Username
     
    strUser = User
     
    objCommand.CommandText = "SELECT Name, ADsPath FROM 'LDAP://dc=mjs,dc=local' where name='" & strUser & "*' and objectCategory='user'"
    Set objRecordSet = objCommand.Execute
    If objRecordSet.RecordCount > 0 Then
     
    ' on inscrit le cn dans une variable, et voilà
     
    usrCN = objRecordSet.Fields("ADsPath").Value
    Set objUser = GetObject (usrCN)
     
    End If
     
    dtmAccountExpiration = objUser.AccountExpirationDate
     
    If dtmAccountExpiration <> "01/01/1601 01:00:00" Then
        MsgBox "Votre compte expire le : " & objUser.AccountExpirationDate, vbExclamation, "Avertissement"
    End If

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

Discussions similaires

  1. [XML] recup des infos XML dans un fichier PHP
    Par ps3game dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/04/2010, 10h52
  2. [MySQL] recup d'info dans formulaire
    Par yayacameleon dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/11/2005, 10h36
  3. Insertion d'info dans un textarea
    Par krown dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/01/2005, 21h32
  4. [C#] balise <a> en fonction d'infos dans l
    Par Pierrre dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/08/2004, 12h40
  5. Réponses: 2
    Dernier message: 19/01/2004, 12h19

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