vbscript network-shares

Acceda al recurso compartido de red desde VBScript, por ejemplo, FileSystemObject



network-shares (1)

¿Hay una buena manera de acceder a los recursos compartidos de red desde un script VBS, con credenciales alternativas (no las credenciales con las que se ejecuta el script VBS)?

La intención es realizar dos tareas:

  1. navegue mediante programación en una estructura remota de archivos compartidos, para confirmar que existen algunos archivos remotos, y copie un archivo sobre el otro (ambos remotos)
  2. copiar archivos desde una unidad local (a la que se accede con nombre de usuario / permisos locales) en una unidad remota (a la que se accede con las credenciales alternativas)

Hasta donde puedo decir, FSO (Scripting.FileSystemObject) está fuera de la imagen, porque siempre se ejecuta con las credenciales de la aplicación que lo usa, lo que sería el usuario de la máquina local. (?)

El único enfoque de apariencia viable que he encontrado al buscar en Google para preparar un archivo por lotes (o una llamada extendida a "cmd.exe") que usa el "uso neto" para proporcionar las credenciales de los recursos compartidos remotos, y luego copia los archivos con robocopy o similar , desde dentro de la misma "sesión" del shell de comandos. Esto funcionaría bien para copiar / implementar archivos desde el disco local al recurso compartido remoto, pero sería muy complicado y frágil hacer cualquier tipo de navegación en el sistema de archivos (como lo haría con FSO) de esta manera.

Otra posibilidad que he considerado consiste en tener dos sesiones de secuencias de comandos: usted llama a la secuencia de comandos (proporcionando las credenciales alternativas en la línea de comandos) y ejecuta una sesión cmd.exe, que primero hace un "uso neto" para asignar el recurso compartido remoto a un temporal la unidad local, luego se ejecuta en modo "en realidad hacer cosas" y usa FSO, luego, cuando se hace (nuevamente en el shell cmd.exe), se desconecta la unidad temporal con "uso neto" nuevamente. Esto es torpe (varias ventanas, unidad temporal ...) y ni siquiera estoy seguro de que funcione.

¿Alguien sabe de alguna manera, o sabe de una alternativa viable? (se adhiere a VBScript / WScript en una máquina con Windows 2000 - ¡sin PowerShell!)


OK, estaba trabajando bajo una idea errónea: que FSO no "recogería" las credenciales de red establecidas con "NET USE" (o Wscript.Network "MapNetworkDrive").

Resulta que sí, y el siguiente código de ejemplo funciona muy bien (sin necesidad de configurar unidades de red temporales):

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