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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 . . .
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?
Celle qui m'intéresse est la bdd Master, elle contient toutes les données telles que facsimile, givename . . .
Partager