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

VBScript Discussion :

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


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Se connecter à un répertoire réseau pour la première fois : login nécessaire
    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 !

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    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...
    Tu n'as pas assez bien cherché

    Tu peux le faire en WMI, regarde ici :
    http://msdn.microsoft.com/en-us/libr...90(VS.85).aspx
    A partir de la ligne "Specifying Credentials and an Authentication Level for the Remote Connection" cela t'interessera. Il faut utiliser l'objet SWbemlocator.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Tu n'as pas assez bien cherché

    Tu peux le faire en WMI, regarde ici :
    http://msdn.microsoft.com/en-us/libr...90(VS.85).aspx
    A partir de la ligne "Specifying Credentials and an Authentication Level for the Remote Connection" cela t'interessera. Il faut utiliser l'objet SWbemlocator.
    Bonjour et merci pour la rapidité de ta réponse !

    J'ai regardé wbem et wmi et j'ai réussi à coder ceci :
    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
    '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 !

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    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...
    Oui il y en a et tu dois les utiliser.
    En fait FSO ne peux pas copier via le réseau si je ne me trompe pas.

    L'objet CIM_DataFile que tu utilises dans ta requêtes SQL te renvois une collection d'objet, et donc dans ta boucle pour chaque objet tu peux acceder aux propriétés et methode de l'objet. Dont une qui s'appelle Copy :
    http://msdn.microsoft.com/en-us/libr...32(VS.85).aspx
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Oui il y en a et tu dois les utiliser.
    En fait FSO ne peux pas copier via le réseau si je ne me trompe pas.

    L'objet CIM_DataFile que tu utilises dans ta requêtes SQL te renvois une collection d'objet, et donc dans ta boucle pour chaque objet tu peux acceder aux propriétés et methode de l'objet. Dont une qui s'appelle Copy :
    http://msdn.microsoft.com/en-us/libr...32(VS.85).aspx
    Bonjour !

    Merci beaucoup pour ce lien ! Je n'avais pas assez bien cherché... Encore une fois !

    Effectivement, le FSO ne fait pas de copie via réseau. En revanche, le fait de créer un lecteur réseau le lui permet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '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 :
    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
    '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
    For Each 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 !

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox objFile.Copy(myFile)
    Pas sur du tout que cela marche.
    D'ailleur cela me parait pas bon du tout.

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim retour
    retour = objFile.Copy(myFile)
    msgbox retour
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  7. #7
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox objFile.Copy(myFile)
    Pas sur du tout que cela marche.
    D'ailleur cela me parait pas bon du tout.

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim retour
    retour = objFile.Copy(myFile)
    msgbox retour
    Si si ça fonctionne bien mais renvoie le code '9'...
    En revanche, lorsque je remplace le répertoire de destination par 'd:\' uniquement, le résultat renvoyé est '0' qui signifie que la copie s'est déroulée sans problème...
    Cependant il y a bien un problème... Les fichiers copiés se trouvent sur le 'd:' du serveur et non sur le pc de destination...

    Je ne sais plus comment aborder tout ça !

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/08/2016, 17h32
  2. Réponses: 51
    Dernier message: 18/11/2011, 10h38
  3. Réponses: 0
    Dernier message: 20/05/2011, 16h20
  4. Réponses: 32
    Dernier message: 13/12/2010, 10h17

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