Acceda a la red compartida desde VBScript, por ejemplo, FileSystemObject

¿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. navegar mediante progtwigción una estructura de archivos compartidos remotos, para confirmar que existen un par de archivos remotos, y copiar 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 que FSO (Scripting.FileSystemObject) está fuera de la imagen, porque siempre se ejecuta con las credenciales de la aplicación que lo usa, 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 llamada extendida a “cmd.exe”) que usa “uso de red” para proporcionar las credenciales de compartir a distancia, y luego copia los archivos con robocopy o similar , desde dentro de la misma “sesión” de comando-shell. Esto funcionaría bien para copiar / desplegar archivos desde la unidad local al recurso compartido remoto, pero sería muy complicado y frágil hacer cualquier tipo de exploración del sistema de archivos (como lo haría con FSO) de esta manera.

Otra posibilidad que he considerado implica tener dos sesiones de scripts: llama al script (proporciona las credenciales alternativas en la línea de comandos) y ejecuta una sesión cmd.exe, que primero hace un “uso de red” para asignar el recurso compartido remoto a un recurso temporal unidad local, luego se ejecuta en un modo “realmente hacer cosas” y utiliza FSO, luego cuando está hecho (de vuelta en el shell cmd.exe) desconecta la unidad temporal con “uso de red” de nuevo. Esto es torpe (ventanas múltiples, unidad temporal …) y ni siquiera estoy seguro de que funcione.

¿Alguien sabe de alguna manera, o sabe de una alternativa viable? (Se apega a VBScript / WScript en una máquina con Windows 2000 – ¡no PowerShell!)

OK, estaba trabajando bajo una concepción errónea: que FSO no “captarí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 
Intereting Posts