Question

Existe-t-il un bon moyen d'accéder aux partages réseau à partir d'un script VBS, avec des informations d'identification alternatives (et non les informations d'identification avec lesquelles le script VBS est exécuté)?

L'intention est d'effectuer deux tâches:

  1. parcourez par programme une structure de fichier de partage distant, afin de confirmer l'existence de deux fichiers distants, et copiez un fichier sur l'autre (les deux distants)
  2. copier des fichiers d'un lecteur local (auquel on a accès avec un nom d'utilisateur / des autorisations local) sur un lecteur distant (auquel on a accès avec d'autres informations d'identification)

Autant que je sache, FSO (Scripting.FileSystemObject) n’est pas visible, car il est toujours exécuté avec les informations d’identification de l’application qui l’utilise - ce qui serait l’utilisateur local de la machine. (?)

La seule approche viable apparente que j'ai trouvée lors de la recherche sur Google pour préparer un fichier de commandes (ou un appel étendu à "cmd.exe") qui utilise "l'utilisation du réseau". pour fournir les informations d'identification de partage à distance, puis copie les fichiers avec robocopy ou similaire, à partir de la même "session" shell de commande. Cela fonctionnerait bien pour copier / déployer des fichiers du disque local vers le partage distant, mais il serait très compliqué et cassant de faire toute sorte de navigation dans le système de fichiers (comme vous le feriez avec FSO) de cette manière.

Une autre possibilité que j'ai envisagée implique d'avoir deux sessions de script: vous appelez le script (en fournissant les informations d'identification de remplacement dans la ligne de commande) et il exécute une session cmd.exe, qui effectue d'abord une "utilisation du réseau". pour mapper le partage distant sur un lecteur local temporaire, puis s'exécute lui-même dans un dossier "réellement actif". mode et utilise FSO, puis, une fois terminé (dans le shell cmd.exe), déconnecte le lecteur temporaire avec l'option "utilisation du réseau". encore. C'est maladroit (fenêtres multiples, lecteur temporaire ...) et je ne suis même pas sûr que cela fonctionnerait.

Quelqu'un sait-il de toute façon ou connaît-il une alternative viable? (s'en tenir à VBScript / WScript sur une machine Windows 2000 - pas de PowerShell!)

Était-ce utile?

La solution

OK, j’ai eu une idée fausse, à savoir que FSO ne "prendrait pas la relève". les identifiants de réseau établis avec "NET USE". (ou Wscript.Network "MapNetworkDrive").

Il s'avère que c'est le cas, et l'exemple de code suivant fonctionne très bien (sans avoir besoin de configurer des lecteurs réseau temporaires):

ServerShare = "\\192.168.3.56\d<*>quot;
UserName = "domain\username"
Password = "password"

Set NetworkObject = CreateObject("WScript.Network")
Set FSO = CreateObject("Scripting.FileSystemObject")

NetworkObject.MapNetworkDrive "", ServerShare, False, UserName, Password

Set Directory = FSO.GetFolder(ServerShare)
For Each FileName In Directory.Files
    WScript.Echo FileName.Name
Next

Set FileName = Nothing
Set Directory = Nothing
Set FSO = Nothing

NetworkObject.RemoveNetworkDrive ServerShare, True, False

Set ShellObject = Nothing
Set NetworkObject = Nothing
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top