Existe-t-il un bon moyen d'accéder aux partages réseau à partir d'un script VBS, avec des informations d'identification alternatives (pas les informations d'identification avec lesquelles le script VBS s'exécute)?
L'intention est d'effectuer deux tâches:
Autant que je sache, FSO (Scripting.FileSystemObject) est hors de l'image, car il s'exécute toujours avec les informations d'identification de l'application qui l'utilise - qui serait l'utilisateur de la machine locale. (?)
La seule approche d'apparence viable que j'ai trouvée lors de la recherche sur Google pour préparer un fichier batch (ou un appel étendu à "cmd.exe") qui utilise "Net Use" pour fournir les informations d'identification de partage à distance, puis copie les fichiers avec robocopy ou similaire , depuis la même "session" de shell de commande. Cela fonctionnerait bien pour copier/déployer des fichiers du lecteur local vers le partage distant, mais il serait très compliqué et fragile de faire n'importe quel type 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 consiste à avoir deux sessions de script - vous appelez le script (en fournissant les informations d'identification alternatives dans la ligne de commande) et il exécute une session cmd.exe, qui effectue d'abord une "utilisation nette" pour mapper le partage distant sur un partage temporaire disque local, puis s'exécute en mode "fait vraiment des choses" et utilise FSO, puis quand il est fait (de retour dans le shell cmd.exe) déconnecte à nouveau le lecteur temporaire avec "Net Use". C'est maladroit (plusieurs fenêtres, lecteur temporaire ...) et je ne suis même pas sûr que cela fonctionnerait.
Quelqu'un connaît-il l'une ou l'autre façon ou connaît-il une alternative viable? (coller à VBScript/WScript sur une machine Windows 2000 - pas PowerShell!)
OK, je travaillais sous une idée fausse - que FSO ne "ramasserait" pas les informations d'identification réseau établies 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$"
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