Se connecter à un répertoire réseau pour la première fois : login nécessaire

v.massip Messages postés 48 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 décembre 2008 - 4 déc. 2008 à 16:25
v.massip Messages postés 48 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 décembre 2008 - 9 déc. 2008 à 11:14
Bonjour à tous.

Voici mon problème :
J'utilise QuickTest Pro (donc du VBS) et je dois, dans le cadre d'un test, récupérer un fichier que l'application testée a généré.

QTP s'exécute sur une machine du réseau ayant son duo User/Mdp perso et le fichier généré se trouve sur un serveur ayant également son duo User/Mdp d'accès.

Mon soucis se trouve au niveau de la première connexion au répertoire dans lequel se trouve le fichier à récupérer.

En effet, manuellement, j'ai 2 possibilités pour accéder au répertoire final :
1) je crée une connexion au disque réseau dont un raccourci se trouvera sur mon poste de travail ;
2) j'indique le nom du serveur dans la commande 'Exécuter' de Windows et je navigue ensuite dans les répertoires.
Pour ces 2 méthodes, lors de la première connexion, une fenêtre de login apparaît.

Lors de l'automatisation du test qui doit récupérer le fichier, j'utilise une variante de FSO (en fait une bidouille avec Excel car j'ai des besoins très spécifiques au niveau de la recherche de fichier et de la performance), mais le schema reste le même. Donc, lors de la première connexion (où lors de la première exécution du test) une fenêtre de login s'affiche et cela fait planter mon test...

J'ai eu beau chercher, je n'ai pas trouvé d'objets, de fonctions, de méthodes, ni même d'exemples permettant de créer directement une connexion réseau avec login ou de se connecter directement à un répertoire réseau avec login...

J'ai bien trouvé l'objet WScript.WshNetwork, mais cela permet uniquement de créer ou de supprimer une connexion réseau avec raccourci (ce que j'aimerai finalement éviter...)...

Voilà, si vous aviez une réponse à ce problème ou même une approche différente de la mienne, cela m'aiderait énormément.

Merci d'avance et à bientôt !

9 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
4 déc. 2008 à 16:43
 Bonjour,

wbem et wmi peuvent être une solution:
http://www.vbfrance.com/codes/INVENTAIRE-FICHIERS-SUR-SERVER-DISTANT-LOCAL_41522.aspx

jean-marc
0
media6 Messages postés 51 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 7 juillet 2010
5 déc. 2008 à 17:46
Salut,
avec LDAP c'est possible, tu trouveras plusieurs sources et exemples sur le site.
Sinon avec l'API : WNetAddConnection2
0
v.massip Messages postés 48 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 décembre 2008 2
8 déc. 2008 à 17:14
Bonjour et merci pour la rapidité de ta réponse !

J'ai regardé wbem et wmi et j'ai réussi à coder ceci :
'Objet FSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Paramètre de sécurité
Const WbemAuthenticationLevelPktPrivacy = 6
'Paramètres de connexion
strUser = "USER"
strPassword = "PASSWORD"
strNamespace = "root\cimv2"
strComputer = "COMPUTER"
'Création de la connexion
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objwbemLocator.ConnectServer(strComputer, strNamespace, strUser, strPassword)
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
'Définition des variables
Dim colFiles, objFile, tmpF
'Récupération des fichiers souhaités sur le serveur
Set colFiles = objWMIService.ExecQuery("Select * " & _
                                                                                    "From CIM_DataFile " & _
                                                                                    "Where Drive = 'D:' " & _
                                                                                    "And Path = '\\REP1\\REP2\\' " & _
                                                                                    "And Filename Like '%FILTRE1%FILTRE2%'" & _
                                                                                    "And Extension = 'xml'")
'Récupération de la liste des fichiers et affichage
tmpF = ""
For Each objFile in colFiles
    tmpF = tmpF & objFile.Filename & "." & objFile.Extension & " : " & objFile.Name & vbcr
Next
msgbox tmpF
'Répertoire local de téléchargement
Dim myfolder
myfolder = "D:\Documents and Settings\USER\Bureau\MonDossierTest"
'Copie des fichiers
Const OverwriteExisting = TRUE
For Each objFile in colFiles
    objFSO.Copy myfolder & objFile.Filename & "." & objFile.Extension
Next

J'arrive donc bien à récupérer rapidement la liste des fichiers qui m'intéresse sur le serveur distant.
Mon soucis est que je n'arrive toujours pas à faire la copie de ces fichiers en local sur la machine exécutant le script...
J'ai l'impression que le FSO ne détecte toujours pas la connexion au serveur. Cela marche seulement lorsque je crée la première connexion manuellement (création d'un jeton de connexion ?)...

Aurais-tu d'autres idées pour me dépanner steuplé ?
Y-a-t-il par exemple des méthodes permettant la copie via wmi ou wbem ? Je n'en ai par trouvé mais on ne sait jamais...

Merci d'avance !
0
v.massip Messages postés 48 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 décembre 2008 2
8 déc. 2008 à 17:22
Bonjour et merci également pour ta réponse !

J'ai recherché des informations sur LDAP, mais après de multiples essais, je n'ai pas réussi à le mettre en pratique. En fait, je ne connais pas l'architecture réseau me permettant de définir les paramètres de connexion au réseau... (forêt, arbre, ...) Y aurait-il un moyen de le faire facilement ? Ou suis-je en train de partir complètement de travers ?

En revanche, pour WNetAddConnection2, je ne vois pas comment l'intégrer dans mon environnement de développement... Est-ce possible de l'intégrer dans du VBS ?

Merci encore pour ton aide !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
8 déc. 2008 à 17:52
 Bonjour,

Il faut utiliser la méthode CopyFile de la collection colFiles.

For Each objFile in colFiles
   objFile.CopyFile ( source, destination[, overwrite] )
Next

jean-marc
0
v.massip Messages postés 48 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 décembre 2008 2
8 déc. 2008 à 18:10
Bonjour !

J'avais déjà essayé cette méthode qui me donnait l'erreur suivante :
Cet objet ne gère pas cette propriété ou cette méthode:
'CopyFile'

Au final j'avais le code suivant :
For Each objFile in colFiles
     objFile.CopyFile "\" & strComputer & "\d$\REP1\REP2\REP3", myfolder
Next

Mais n'est-ce pas une méthode qui ne s'exécute qu'en local ?
0
v.massip Messages postés 48 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 décembre 2008 2
8 déc. 2008 à 18:16
Autant pour moi, j'avais bien utilisé l'objet FSO pour faire le CopyFile -->
objFSO.CopyFile "\" & strComputer & "\d$\REP1\REP2\REP3", myfolder

En revanche cela me donne une 'General Runtime Error'... Je pense que cela est dû au fait que la connexion au serveur créée n'est pas reconnue par le FSO (je me connecte en administrateur, je dois donc avoir les droits de copie...).
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
8 déc. 2008 à 19:05
Re,

non testé
objFile.CopyFile objFile.Path & objFile.FileName, MyFolder & objFile.FileName, True

Pour éviter
myfolder = "D:\Documents and Settings\USER\Bureau\MonDossierTest"
voir du côté de l'objet Shell:
Set objShell = CreateObject("WScript.Shell")
strDesktop = objShell.SpecialFolders("Desktop")
MsgBox strDesktop & "\MonDossierTest" & objFile.Name

jean-marc
0
v.massip Messages postés 48 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 décembre 2008 2
9 déc. 2008 à 11:14
Bonjour et merci !

'CopyFile' est une méthode du FSO et non de CIM_DataFile qui utilise 'Copy' ou 'CopyEx' (en revanche, l'écrasement du fichier de destination est impossible).


En fait, le FSO ne fait pas de copie via réseau. En revanche, le fait de créer un lecteur réseau le lui permet :

'Connexion du lecteur réseau
Set WSHNetwork = CreateObject("WScript.Network")
WSHNetwork.MapNetworkDrive"z:","\\COMPUTER\d$",True, strUser, strPassword
'Déconnexion du lecteur réseau
WSHNetwork.RemoveNetworkDrive"z:", true

Cela m'arrange moyennement mais si je ne trouve que cette solution, ce sera celle-là...


Donc j'essaie toujours la copie via CIM_DataFile !

Voici mon code :

'Constante de sécurité de connexion
Const WbemAuthenticationLevelPktPrivacy = 6
 
'Définition des paramètres de connexion
strUser = "USER"
strPassword = "PASSWORD"
strNamespace = "root\cimv2"
strComputer = "COMPUTER"
 
'Définition de la connexion au serveur
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objwbemLocator.ConnectServer(strComputer, strNamespace, strUser, strPassword)
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
 
'Définition de variables
Dim colFiles, objFile, myFile
 
'Récupération des fichiers recherchés
Set colFiles = objWMIService.ExecQuery("Select * " & _
"From CIM_DataFile " & _
"Where Drive = 'D:' " & _
"And Path = '\\REP1\\REP2\\REP3\\' " & _
"And Filename Like '%FILTRE1%FILTRE2%'" & _
"And Extension = 'xml'")
 
'Définition du répertoire de destination de la copie
Set objShell = CreateObject("WScript.Shell")
myFolder = objShell.SpecialFolders("Desktop") & "\MonDossierTest"
 
'Copie locale de chaque fichier trouvé sur le répertoire de destination
ForEach objFile in colFiles
myFile = myFolder & objFile.Filename & "." & objFile.Extension
msgbox objFile.Copy(myFile)
Next

Le problème, c'est que le Copy semble bien se déclencher mais me renvoie la valeur '9', ce qui signifie 'Invalid object' selon la doc msdn.

J'ai essayé également le CopyEx mais la même valeur est retournée...


Aurais-tu une idée du problème ?


Merci d'avance !
0
Rejoignez-nous