[Active Directory / LDAP][Récupération d'adresses emails du domaine]

[Récupération d'adresses emails du domaine] [Active Directory / LDAP] - Infrastructures serveurs - Systèmes & Réseaux Pro

Marsh Posté le 08-11-2007 à 10:00:17    

Bonjour à tou(te)s,
 
Mon post s'intégre dans un problème plus général évoqué ici http://forum.hardware.fr/hfr/OSAlt [...] 4985_1.htm et fait doublon avec un post que j'ai fait à tort dans un autre forum ici http://forum.hardware.fr/hfr/Progr [...] 9413_1.htm .
 
Je cherche à récupérer sur un domaine la liste des adresses emails existantes sur le domaine, pour en faire un fichier texte qui sera ensuite envoyé sur une passerelle relais SMTP sous Linux. Je ne suis pas expert en VB ni dans la structure d'Active Directory, ni dans la connaissance de LDAP.
 
J'ai récupéré un script qui pourrait m'être très utile à cette adresse http://postfix.state-of-mind.de/pa [...] mailrelay/ .
Le voici en détail et modifié par mes soins :
 

Code :
  1. ' Export all valid recipients (= proxyAddresses) into a
  2. ' file virtual.txt
  3. '
  4. ' Ferdinand Hoffmann & Patrick Koetter
  5. ' 20021100901
  6. ' Shamelessly stolen from
  7. ' http://www.microsoft.com/windows2000/techinfo/ \
  8. ' planning/activedirectory/bulksteps.asp
  9. 'Global variables
  10. Dim Container
  11. Dim OutPutFile
  12. Dim FileSystem
  13. 'Initialize global variables
  14. Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject" )
  15. Set OutPutFile = FileSystem.CreateTextFile("virtual.txt", True)
  16. Set Container = GetObject("LDAP://OU=Societe,DC=xxxxxxxxxxxxxx,DC=local" )
  17. 'Enumerate Container
  18. EnumerateUsers Container
  19. 'Clean up
  20. OutPutFile.Close
  21. Set FileSystem = Nothing
  22. Set Container = Nothing
  23. 'Say Finished when your done
  24. WScript.Echo "Finished"
  25. WScript.Quit(0)
  26. 'List all Users
  27. Sub EnumerateUsers(Cont)
  28. Dim User
  29. 'Go through all Users and select them
  30. For Each User In Cont
  31. Select Case LCase(User.Class)
  32. 'If you find Users and Groups
  33. 'Added groups after Милен Панков mailed me about it :)
  34. Case "user", "group"
  35.   'Select all proxyAddresses
  36.   Dim Alias
  37.   If Not IsEmpty(User.proxyAddresses) Then
  38.     For Each Alias in User.proxyAddresses
  39.     OutPutFile.WriteLine "alias: " & Alias
  40.     'WScript.Echo Alias
  41.   Next
  42.   End If
  43. Case "organizationalunit" , "container"
  44.   EnumerateUsers User
  45. End Select
  46. Next
  47. End Sub


 
xxxxxxxxxxx  correspond à une OU valide masquée pour la confidentialité.
 
Le script marche et me récupère quelques dizaines d'adresses emails, puis il me fait l'erreur 800A01C3, cet objet n'est pas une collection sur la ligne 43

Code :
  1. For Each Alias in User.proxyAddresses


 
La structure LDAP à parcourir est la suivante (schématiquement) :
 
A - B
     C
     D
     E - F
          G
          H
          I
          ...
    W
    X
 
En gros il me récupère bien les adresses emails des OU A à F (il rentre bien dans la sous-unité F), mais dès qu'il rentre dans G paf l'erreur ...
 
Après quelques tests, j'en ai conclu que quelques utilisateurs n'arrivaient pas à être lus, et je n'ai pas pu identifier ce qui les différenciaient des autres. J'ai solutionné en les mettant en fin de liste ce qui me permet de récupérer la grande majorité des adresses emails, mais cette solution est bancale et ne me plait pas.  
 
Qu'est ce qui peut empêcher le parcours de l'annuaire LDAP dans un compte d'utilisateur Active Directory et qui me provoque cette erreur?  
 
Merci de votre aide, Théo

Reply

Marsh Posté le 08-11-2007 à 10:00:17   

Reply

Marsh Posté le 08-11-2007 à 12:04:28    

Fais plutôt une recherche ldap sur les users et récup dans leurs propriétés les adresses mail.

Reply

Marsh Posté le 08-11-2007 à 13:46:45    

Sinon quand tu exportes ton ldap AD ( ldifde -f ldap.ldf ) tu as bien toutes les OU/adresses mails?
 
++

Reply

Marsh Posté le 08-11-2007 à 14:48:07    

Je@nb a écrit :

Fais plutôt une recherche ldap sur les users et récup dans leurs propriétés les adresses mail.


 
Euh très bien, je suis assez d'accord puisque c'est ce que je veux faire... mais là il va falloir que tu m'en dises plus et que tu m'expliques un peu comment faire :)
 
Théo

Reply

Marsh Posté le 08-11-2007 à 14:54:51    

boobaka a écrit :

Sinon quand tu exportes ton ldap AD ( ldifde -f ldap.ldf ) tu as bien toutes les OU/adresses mails?
++


 
J'ai bien toutes les OU situées dans Societe (sauf les quelques unes qui ne marchent pas que j'ai isolé) ... j'ai les adresses emails correspondants aux utilisateurs situés dans ces OU.... MAIS je n'ai pas les alias (????????????????)... et ça me pose problème après au niveau de Postfix quand je dois lui déclarer les recipients valides.
 
Théo

Reply

Marsh Posté le 08-11-2007 à 14:58:12    

En gros voilà ce que je récupère après ce script:
 

alias: smtp:A.AUBRY@xxxxxxxxxxxx.com
alias: smtp:AAUBRY@xxxxxxxxxxxx.fr
alias: smtp:AAUBRY@xxxxxxxxxxxx.com
alias: smtp:A.AUBRY@xxxxxxxxxxxx.fr
alias: smtp:Annick.AUBRY@xxxxxxxxxxxx.fr
alias: smtp:A.AUBRY@xxxxxxxxxxxx.local
alias: X400:c=FR;a= ;p=xxxxxxxxxxxx;o=Exchange;s=AUBRY;g=Annick;
alias: SMTP:Annick.AUBRY@xxxxxxxxxxxx.com
alias: smtp:B.GARCHER@xxxxxxxxxxxx.com
...


 
(les xxxxxxxxxxxx remplacent le nom de domaine réel bien entendu :o)
 
Théo

Reply

Marsh Posté le 08-11-2007 à 15:10:13    

Je@nb a écrit :

Fais plutôt une recherche ldap sur les users et récup dans leurs propriétés les adresses mail.


 
Ok, sinon quelles sont les différentes propriétés de User.proxyAddresses ?
Quand je trace

Code :
  1. For Each Alias in User.proxyAddresses

, Alias ne contient pas l'Alias de messagerie... mais seulement smtp:l'adresse email....
 
Quelque chose qui déconne donc mon AD, ou dans le programme?
 
Théo

Reply

Marsh Posté le 08-11-2007 à 15:33:06    

Je@nb a écrit :

Fais plutôt une recherche ldap sur les users et récup dans leurs propriétés les adresses mail.


 
Allez on est jamais aussi bien servi que par soi même :)
 
J'ai modifié le script, premier problème résolu j'ai bien les noms et prénoms de mes utilisateurs avec tous leurs alias:
 

' Export all valid recipients (= proxyAddresses) into a
' file virtual.txt
'
' Ferdinand Hoffmann & Patrick Koetter
' 20021100901
' Shamelessly stolen from
' http://www.microsoft.com/windows2000/techinfo/ \
' planning/activedirectory/bulksteps.asp
 
 
'Global variables
Dim Container
Dim OutPutFile
Dim FileSystem
 
'Initialize global variables
Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject" )
Set OutPutFile = FileSystem.CreateTextFile("recipients.data", True)
Set Container = GetObject("LDAP://OU=Societe,DC=terre-et-decor,DC=local" )
 
'Enumerate Container
EnumerateUsers Container
 
'Clean up
OutPutFile.Close
Set FileSystem = Nothing
Set Container = Nothing
 
'Say Finished when your done
' WScript.Echo "Finished"
WScript.Quit(0)
 
'List all Users
Sub EnumerateUsers(Cont)
 Dim User
 
 'Go through all Users and select them
 For Each User In Cont
  Select Case LCase(User.Class)
   
  'If you find Users and Groups
  'Added groups after Милен Панков mailed me about it :)
  Case "user", "group"
    'Select all proxyAddresses
    Dim Alias
    If Not IsEmpty(User.proxyAddresses) Then
   
      For Each Alias in User.proxyAddresses
       
                             ' [Theo - Change - 08/11/2007] - Adding User.DisplayName
      OutPutFile.WriteLine "alias: " & User.DisplayName & " " & Alias
      ' WScript.Echo User.DisplayName & Alias
    Next
    End If
   
  Case "organizationalunit" , "container"
   EnumerateUsers User
   
  End Select
 Next
End Sub


 
Maintenant il me reste à comprendre pourquoi ca bug sur certains utilisateurs et là j'ai peut être un début d'explication :
 

[b][u]The attribute 'proxyAddresses' can be empty, singlevalued or multivalued.
You use in the script *only* a For-Each loop to go through the existing values of this attribute. This can raise an error in cases when this userobject's attribute contain less than two values because your script is missing that check and an alternative string comparing[/u][/b].


 
Lu ici http://www.petri.co.il/forums/showthread.php?p=84828 ... ah que c'est bien les forums bien documentés !!
 
Théo

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed