[VBS] Monter / Démonter / Contrôler des lecteurs réseaux

Monter / Démonter / Contrôler des lecteurs réseaux [VBS] - VB/VBA/VBS - Programmation

Marsh Posté le 23-06-2011 à 10:56:16    

Bonjour,  
 
Je fais appel à vous aujourd'hui car je bloque sur script.
 
Voici le pseudo algo de ce que je souhaite faire :
 

si r: existe alors
 si r: != \\serveur1\partage1\ alors
  demonte lecteur r:
  monte lecteur r: == \\serveur1\partage1\
 fin si
sinon
 monte lecteur r: == \\serveur1\partage1\
fin si


 
Voici ce que je suis arrivé à pondre :  
 

Set NT = WScript.CreateObject("WScript.Network" )
 
If NT.DriveExists("R:" ) THEN
 If ''r: != \\serveur1\partage1\ alors
  NT.RemoveNetworkDrive "R:", bForce, true
  NT.MapNetworkDrive "R:","\\serveur1\partage1\","True"
 End If
Else
 NT.MapNetworkDrive "S:","\\serveur1\partage1\","True"
End If


 
Vous comprendrez bien vite que je ne suis pas développeur :)
Mon blocage est à la ligne 3, je ne sais pas comment récupérer le chemin de mon lecteur pour tester si il est égal à une chaîne de caractère.
 
Alors je présume qu'avant de lancer le If, il fait récupérer le chemin du r: dans une variable pour la comparer ensuite à la chaîne de caractère, mais je ne sais pas le faire.
 
Merci pour votre aide !
Mathieu


Message édité par lopezmathieu le 23-06-2011 à 10:57:45
Reply

Marsh Posté le 23-06-2011 à 10:56:16   

Reply

Marsh Posté le 23-06-2011 à 15:45:42    

Je pense que tu te prends la tête pour pas grand chose, pourquoi aller tester s'il existe si c'est seulement pour le recréer ?
Enfin du moins avec ton algo, car ton algo ne correspond pas au code que tu as pondu. Sur ton algo tu n'utilises que le lecteur reseau R, sur ton code tu utilises R et S...
 
Si je pars sur ton algo, tu le démontes, tu le remontes, point.
Une gestion d'erreur pour éviter de démonter s'il n'existe pas, et basta.
 

Code :
  1. Dim oNet
  2. On Error Resume Next
  3. Set NT = CreateObject("Wscript.Network" )
  4. NT.RemoveNetworkDrive "R:",True
  5. NT.MapNetworkDrive "R:","\\\serveur1\partage1"
  6. WSCript.Quit


 
 
Avec ton code, même si je ne pige pas pourquoi R et S pointerait au même endroit si R n'existe pas...  :pt1cable:  
Des fois, au lieu de vouloir pondre un algo, l'expliquer en Français c'est mieux  :whistle:
Au cas où tu te sois trompé, et que tes deux lecteurs reseaux pointent à deux endroits differents, je le prends en compte en spécifiant des variables contenant le chemin vers R (CheminReseauR) et S (CheminReseauS) doivent pointer.
 

Code :
  1. Dim NT,fso,cheminReseauR,CheminReseauS
  2.  
  3. 'On définit les chemins pour les deux lecteurs reseaux qu'on met dans deux variables
  4. CheminReseauR = "\\serveur1\partage1"
  5. CheminReseauS = "\\serveur1\partage2"
  6.  
  7. Set NT = CreateObject("Wscript.Network" )
  8. Set fso = CreateObject("Scripting.FileSystemObject" )
  9.  
  10. 'Si R: existe alors
  11. If fso.DriveExists("R:" ) then
  12.  
  13. 'Si le chemin de R: est différent de CheminReseauR alors
  14.   if fso.GetDrive(fso.GetDriveName("R:" )).ShareName <> CheminReseauR then
  15.      
  16. 'on démonte R:
  17.      NT.RemoveNetworkDrive "R:",True
  18. 'On remonte R: pointant vers CheminReseauR
  19.      NT.MapNetworkDrive "R:",CheminReseauR, True
  20.   End If
  21. 'Sinon (si R: n'existe pas)
  22. Else
  23. 'On monte un lecteur S qui pointe vers CheminReseauS
  24.   NT.MapNetworkDrive "S:",CheminReseauS, True
  25. End If
  26.  
  27. WSCript.Quit


Message édité par SuppotDeSaTante le 23-06-2011 à 15:47:49

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-06-2011 à 16:00:49    

Oui en effet je me suis un peu emmêler les pinceaux dans mes lecteurs :)
Je ré-explique en français donc.
 
J'ai aujourd'hui un lecteur r: qui pointe vers une cible, on la nommera CheminReseau1.
Désormais il faut que ce même lecteur pointe vers une autre cible, CheminReseau2.
Oublions le lecteur s:, que j'avais utilisé temporairement pour mon CheminReseau2.
 
Je veux donc :
1- Voir si r: existe
2- Si il existe : voir si il pointe vers CheminReseau1.
3- Si oui, le démonter puis le remonter de suite vers CheminReseau2.
4- Si il n'existe pas, monter r: vers CheminReseau2.
 
Je pense donc que je peux reprendre ton code, et changer seulement le lecteur en ligne 24, et supprimer l'affectation en ligne 5.
 
Sinon ta proposition de code me semble logique étant donné ce que je veux faire.
Tu aurai fait différemment ?


Message édité par lopezmathieu le 23-06-2011 à 16:04:56
Reply

Marsh Posté le 23-06-2011 à 16:20:06    

Perso, je me foutrais totalement de savoir le chemin d'origine de R:
Je démonte et je remonte, peu importe si R: est bon ou pas.
Donc je mettrais le 1er code.
 
 
Après si tu veux faire ca plus "proprement" en testant le chemin d'origine, faut modifier un peu le code :

Code :
  1. Dim NT,fso,cheminReseau
  2.  
  3. 'Nouveau chemin
  4. CheminReseau = "\\serveur1\partage"
  5.  
  6. Set NT = CreateObject("Wscript.Network" )
  7. Set fso = CreateObject("Scripting.FileSystemObject" )
  8.  
  9. 'Si R: existe alors
  10. If fso.DriveExists("R:" ) then
  11.  
  12. 'Si le chemin de R: est différent de CheminReseau alors
  13.   If fso.GetDrive(fso.GetDriveName("R:" )).ShareName <> CheminReseau then
  14.      
  15. 'on démonte R:
  16.      NT.RemoveNetworkDrive "R:",True
  17. 'On remonte R: pointant vers CheminReseau
  18.      NT.MapNetworkDrive "R:",CheminReseau, True
  19.   End If
  20. 'Sinon si R: n'existe pas
  21. Else
  22.   NT.MapNetworkDrive "R:",CheminReseau, True
  23. End If
  24. WSCript.Quit


Message édité par SuppotDeSaTante le 23-06-2011 à 16:20:43

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-06-2011 à 16:27:37    

Oui je préfère autant faire ça proprement quitte à le faire.
C'est vrai que démonter et remonter à chaque coup, je l'avais, mais je ne trouve pas cela super optimisé.
Après quelles perte au démarrage de Windows lorsque le script se lance ... ok tu as raison ce doit être infime !
Malgré tout, maintenant que tu t'es donné la peine de m'aider, je vais prendre ton code, histoire que tu n'es pas perdu ton temps hein.
 
En tout cas merci beaucoup !

Reply

Marsh Posté le 23-06-2011 à 17:10:33    

Bon je reviens à la charge encore un peu.
 
C'est bizarre mais quand je met les deux instructions ci dessous à la suite dans mon If (après avoir tester si le chemin est différent ...), elles ne s'exécutent pas.

Code :
  1. NT.RemoveNetworkDrive "R:",True
  2. NT.MapNetworkDrive "R:",CheminReseau, True


 
Il ne se passe rien, mon r: n'est ni démonté, ni remonté.
Par contre, si je ne met que la commande qui démonte le lecteur, là le lecteur se démonte bien.
 
Et pour me faire encore plus douter, si je démonte le r: et que je remonte un lecteur sous une autre lettre (s: par ex.) là le r: est démonté, et le s: est monté ...
 

Code :
  1. NT.RemoveNetworkDrive "R:",True
  2. NT.MapNetworkDrive "S:",CheminReseau, True


 
C'est en tain de me rendre chèvre, je vais travailler avec le lecteur S: je crois et ça va régler pas mal de problème et faire gagner du temps à tout le monde !
 
Finalement, et à mon grand regret, je vais peut être la jouer moins délicatement !


Message édité par lopezmathieu le 23-06-2011 à 17:25:24
Reply

Sujets relatifs:

Leave a Replay

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