Bonjour,
Minuit passé, je n'arrive toujours pas, je poste toutes les manœuvres que j'ai tentées les plus ou moins farfelues les unes des autres . . .
Faut dire que je ne suis pas très très doué en SQL . . .
J'ai essayé de plancher sur un script Visual basic pour savoir une partie des commandes SQL, et en voyant ce script ça m'a donné quelques idées qui n'ont pas marché . . .
Code:
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 * ' ------ SCRIPT d'export d'utilisateurs depuis une OU ------ * ' ------ Le domaine AD est a jouter en fixe dans le ------ * ' ------ String StrDomainDN pour des raisons d'utilisations courantes ------ * * dim fso, MyFile, reptemp, filetext * * * Stroucible=inputbox("renseigner le nom de l'ou cible : ") * * ' Attention à modifier le nom LDAP du domaine * strDomainDN ="ou=" & stroucible & ",dc=VotreNomdeDomaine,dc=SonExtention" * * ' Attention le répertoire c:\temp doit exister * reptemp="c:\temp\" * * Filetext=Inputbox("fichier temporaire de l'OU cible : ") * Set fso = CreateObject("Scripting.FileSystemObject") * * ' création d'un fichier txt pour la première partie du script, soit le nom des utilisateurs * set MyFile = fso.CreateTextFile(reptemp + filetext + ".txt") * * ' Ici un filtre sur les utilisateurs et je récupére leur Distinguishedname * strBase = "<LDAP://" & strDomainDN & ">;" * strFilter = "(&(objectclass=user)(objectcategory=person));" * strAttrs = "distinguishedname;" * strScope = "subtree" * * set objConn = CreateObject("ADODB.Connection") * objConn.Provider = "ADsDSOObject" * objConn.Open "Active Directory Provider" * * ' Ici lancement de la requêtes et écriture dans le fichier txt dans le c:\temp * set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope) * objRS.MoveFirst * while Not objRS.EOF * MyFile.WriteLine (objRS.Fields(0).Value) * objRS.MoveNext * wend * MyFile.close * * * ' Maintenant avec le fichier txt je récupère les informations utilisateurs par utilisateurs * on error resume next * Dim objConnection, objRecords, objExcel, strQuery, i, objSpread, intRow * * 'Attention le fichier C:\sources.xls doit exister * strSheet = "c:\Source.xls" * * Set objExcel = CreateObject("Excel.Application") * Set objSpread = objExcel.Workbooks.Open(strSheet) * Set objFSO = CreateObject("Scripting.FileSystemObject") * Set UserListe = objFSO.OpenTextFile(reptemp + Filetext + ".txt") * * 'Renseigner le numéro de la première ligne Excel ou vous souhaité écrire les inforamations * i = 2 * * ' liste des attributs à récupérer * Do Until UserListe.AtEndofStream * UserLDAP = UserListe.Readline * Set objUser = GetObject("LDAP://" & UserLDAP & "") * CNStr = left(UserLDAP, Instr (UserLDAP, ",") -1) * OuStr = Right(UserLDAP, len(UserLDAP) - Instr (UserLDAP, ",")) * objExcel.ActiveSheet.Range("A" & i).Value = CNStr * objExcel.ActiveSheet.Range("B" & i).Value = OuStr * objExcel.ActiveSheet.Range("C" & i).Value = objUser.givenName * objExcel.ActiveSheet.Range("D" & i).Value = objUser.initials * objExcel.ActiveSheet.Range("E" & i).Value = objUser.sn * objExcel.ActiveSheet.Range("F" & i).Value = objUser.displayName * objExcel.ActiveSheet.Range("G" & i).Value = objUser.userPrincipalName * objExcel.ActiveSheet.Range("H" & i).Value = objUser.SamaccountName * objExcel.ActiveSheet.Range("I" & i).Value = objUser.mail * objExcel.ActiveSheet.Range("J" & i).Value = objUser.physicalDeliveryOfficeName * objExcel.ActiveSheet.Range("K" & i).Value = objUser.telephoneNumber * objExcel.ActiveSheet.Range("L" & i).Value = objUser.Description * * i = i + 1 * loop * * * * 'Sauvegarde du fichier Excel * objExcel.ActiveWorkbook.SaveAs(reptemp + Filetext + ".xls") * objExcel.ActiveWorkbook.Close * objExcel.Workbooks.Close * * msgbox "fin de récupération des utilisateurs. Le fichiers excel est dans " + reptemp + Filetext + ".xls" * objExcel.Quit
Voici mes tentatives:
Qui me paraissait d'une logique simpliste étant donné que SQLAD c'est AD => SQL server . . . elle m'a renvoyé cette banale erreur . . .Code:
1
2
3
4
5
6
7
8 SELECT * FROM OPENQUERY(SQLAD, 'SELECT title, displayName, sAMAccountName, givenName, telephoneNumber, facsimileTelephoneNumber, sn FROM ''LDAP://marshall-ff263d/DC=CfsaAftec,DC=MysqlDomain,DC=Users'' where objectClass = ''User''')
Code:
1
2
3
4
5 Msg 7321, Level 16, State 2, Line 1 An error occurred while preparing the query "SELECT title, displayName, sAMAccountName, givenName, telephoneNumber, facsimileTelephoneNumber, sn FROM 'LDAP://marshall-ff263d/DC=CfsaAftec,DC=MysqlDomain,DC=Users' where objectClass = 'User'" for execution against OLE DB provider "ADSDSOObject" for linked server "SQLAD".
Cependant lorsque j'exécute la dernière commande sur laquelle nous avons bataillé, elle fonctionne mais . . .
Code:
1
2
3
4
5
6 CREATE VIEW dbo.vw_AD_USER_INFO AS SELECT * FROM OpenQuery(SQLAD, 'SELECT title, displayName, sAMAccountName, givenName, telephoneNumber, facsimileTelephoneNumber, sn FROM ''LDAP://marshall-ff263d/DC=CfsaAftec,DC=MysqlDomain'' where objectClass = ''User''') GO
Elle renvoie donc qu'il existe déjà un objet nommé mais je ne sais pas comment le mettre dans le fichier Excel . . .
Code:
1
2 Msg 2714, Level 16, State 3, Procedure vw_AD_USER_INFO, Line 4 There is already an object named 'vw_AD_USER_INFO' in the database.
J'avoue je suis perdu avec les codes . . . :bug:
Edit:
Les vues sont visibles dans 2 bases de données, si je veux les extraire pour les mettre dans un fichier Excel, je devrais utiliser OPENROWSET?
http://sphotos.ak.fbcdn.net/hphotos-..._3480583_n.jpg
Celle qui m'intéresse est la bdd Master, elle contient toutes les données telles que facsimile, givename . . .