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

Langage Perl Discussion :

récupérer champ dans Active Directory


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut récupérer champ dans Active Directory
    Bonjour à tous,

    Voici un script qui me permet de récuperer des champs dans mon Active Directory. Tout fonctionne correctement sauf lorsque je tente de récupérer le champ 'lastlogon'. Ce champ est de type 'integer8', le résultat de ma commande me renvoit une chose du genre : win32::ole=HASH(0x197c034) !!

    Pour les autres champs qui sont de type "DirectoryString" ou "DN", je n'ai pas de souci.

    J'ai tenté de récuperer la valeur du HASH, mais je n'y arrive pas.

    Auriez vous une idée ?
    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
     
     
    my $strGroupDN = "OU=utilisateurs,OU=stagiaires,DC=domaine,DC=local";
    use Win32::OLE 'in';
    $Win32::OLE::Warn = 3;
     
    my $objGroup = Win32::OLE->GetObject("LDAP://" . $strGroupDN);
     
     
    foreach my $Member (in $objGroup) {
     
    		$Name = $Member->Name; #Type DirectoryString
     
    		$PathName = $Name.",".$strGroupDN;
     
    		$Lastlogon = $Member->lastLogonTimestamp; #Type Integer8
     
    		print "$Name\n";
     
    		print "$Lastlogon\n";
     
    }
    Je vous remercie,

    Cougar5

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Help
    Re bonjour,

    Quelqu'un aurait une petite idée ?

    merci,

    CC

  3. #3
    Invité
    Invité(e)
    Par défaut
    Désolé, je n'ai pas ta réponse toute crue. Mais ce lien t'aidera certainement, tu as tous les scripts Perl d'administration Windows.
    Dernière modification par Invité ; 04/03/2010 à 21h12.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut WHouaa !!
    Tu n'as pas à être désolé vu la qualité du contenu du zip que tu proposes !!!
    J'ai trouvé une partie de ma réponse, je testerai très prochainement.
    Le temps que j'aurai gagné si j'avais eu ces exemples entre les mains.
    MERCI

    CC

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Mince
    Bonjour,

    Malheureusement, le code indiqué ne fonctionne pas même après quelques modifs.
    Voici le code indiqué dans l'url indiqué plus haut :

    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
     
    # Adapted from VBScript code contained in the book:
    #      "Active Directory Cookbook" by Robbie Allen
    # ISBN: 0-596-00466-4
    # ---------------------------------------------------------------
     
    # not working
     
    # ------ SCRIPT CONFIGURATION ------
    my $strUserDN = "<UserDN>";  # e.g. cn=rallen,ou=Sales,dc=rallencorp,dc=com
    # ------ END CONFIGURATION ---------
    use Win32::OLE;
    $Win32::OLE::Warn = 3;
    my $objUser = Win32::OLE->GetObject("LDAP://" . $strUserDN);
    my $objLogon = $objUser->Get("lastLogonTimestamp");
    my $intLogonTime = ($objLogon->HighPart * 2^32) + $objLogon->LowPart;
    $intLogonTime = $intLogonTime / (60 * 10000000);
    $intLogonTime = $intLogonTime / 1440;
    print "Approx last logon timestamp: ", scalar localtime($intLogonTime),"\n";
    L'auteur indique lui meme que le script ne fonctionne pas.

    J'ai tenté un tas de truc rien n'y fait.

    Si quelqu'un a une idée ?

    Merci,

    CC

  6. #6
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    Le CPAN est ton ami, et plus particulièrement Net::LDAP.

    @+
    Mr6

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Hum ...
    Bonsoir,

    Merci pour mon nouvel ami
    Avec ce module, le résultat est un peu différent mais toujours incompréhensible.

    Dans le code, j'affiche pour un user, le lastlogon mais il s'agit toujours d'un integer8 !
    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
     
    use Net::LDAP;
     
    my $uid = 'CN=admin,CN=Users,DC=Domaine,DC=local';
    my $bindPass = "secret";
    my $ldapServer = 'ldap://localhost:389/';
     
    $ldap = Net::LDAP->new ( $ldapServer ) or die "$@";
     
    $ldap->bind($uid, password =>$bindPass);
     
    $mesg = $ldap->search(
     
    					filter=>"(CN=john smith)", 
    					base=>"CN=Users,DC=Domaine,DC=local"
     
    				);
     
    @entries = $mesg->entries;
    foreach $entry (@entries) {
     
      print "Name: " . $entry->get_value("displayName") . "\n";
      print "LastLogon: ".$entry->get_value("lastLogon")."\n\n";
     
    }
     
    print "\nRESULT : [".$mesg->error()."]\n";
     
    $ldap->unbind;

    Le résultat est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Name: john smith
    LastLogon: 128707204219843750
    Mais je n'arrive toujours pas convertir le résultat de LastLogon en date lisible.

    Merci pour votre aide,

    CC

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Re,
    J'ai trouvé ceci, mais la valeur retournée est négative, elle correspond à la dernière soustraction. La variable $uPval serait alors nulle.

    3. Some functions use a long integer time format that is difficult to deal with.
    (the lastLogon property of users in AD, for example)
    I created this function to translate it into perl time() format from scraps I found on the Internet:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
    $LastLogon = $entry->get_value("lastLogon");
     
    &MS2PerlTime($LastLogon);
    ...
     
     
    sub MS2PerlTime { 
    			my $uPval = pack( "II", $_[0]->{LowPart}, $_[0]->{HighPart} );
    			my ( $bVp, $aVp ) = unpack( "LL", $uPval );
    			$uPval = ( $aVp * 2**32 + $bVp ) / 10000000;
    			return ( $uPval - 11644473600 ); 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Name: john smith
    LastLogon:  -11644473600
    Je n'ai fait que du copié/collé de code, je ne comprends pas trop ce que fait cette fonction...

    Merci,

    CC

    PS : Source récupérée ici : http://perl.markmail.org/message/y7v...stlogon+format

  9. #9
    Invité
    Invité(e)
    Par défaut
    De mémoire, ce nombre est le nombre de millisecondes passées depuis The Epoch (1er janvier 1900 sous Windows ou 1er janvier 1970 sous Unix).

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Merci
    Merci pour vos réponses.
    En voulant faire un reply sur le message précédent pour y présenter quelques valeurs de "lastlogon" brut, j'ai trouvé la solution.

    Par contre, je suis étonné de la complexité du code de mon post précédent par rapport à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    sub MS2PerlTime2 { 
     
    			$uPval =  $_[0] / 10000000;
    			$uPval =  $uPval - 11644473600 ;
    			$Lastlogonconverted = localtime($uPval);
    			return($Lastlogonconverted);
    }
    Voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LastLogon Brut: 129092657111562500   (Fri Jan 29 20:08:31 2010)
    LastLogon Brut: 128707204219843750   (Sun Nov  9 17:07:01 2008)
    LastLogon Brut: 128707203047500000   (Sun Nov  9 17:05:04 2008)
    LastLogon Brut: 128707202814375000   (Sun Nov  9 17:04:41 2008)
    Je trouverai peut être un loup plus tard.

    Dans tous les cas, merci pour l'aiguillage !

    CC

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/03/2009, 10h41
  2. Réponses: 8
    Dernier message: 06/07/2007, 08h03
  3. [VBS] recherche OU d'un utilisateur dans Active directory
    Par Amandine62 dans le forum VBScript
    Réponses: 7
    Dernier message: 16/02/2006, 08h42
  4. Problème droit dans active directory et sur pc local
    Par krfa1 dans le forum Windows XP
    Réponses: 2
    Dernier message: 17/01/2006, 14h49
  5. [VB.NET] Recherche Info dans Active Directory
    Par Vlat dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/12/2005, 15h29

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