Pregunta

¿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 una estructura de archivos compartidos remotos, para confirmar que existen un par de archivos remotos, y copie un archivo sobre el otro (ambos remotos)
  2. copie archivos de 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)

Por lo que puedo decir 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 que parece viable que he encontrado al buscar en Google para preparar un archivo Batch (o una llamada extendida a "cmd.exe") que usa "uso neto" para proporcionar las credenciales compartidas remotas, y luego copia los archivos con robocopy o similar, desde el mismo comando-shell " session " ;. Esto funcionaría bien para copiar / implementar archivos del disco local en el 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 secuencias de comandos: se llama la secuencia de comandos (que proporciona 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 una unidad local temporal, luego se ejecuta en un "realmente hacer cosas" modo y usa FSO, luego cuando está hecho (de nuevo en el shell cmd.exe) desconecta la unidad temporal con " net use " otra vez. Esto es torpe (múltiples ventanas, unidad temporal ...) y ni siquiera estoy seguro de que funcione.

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

¿Fue útil?

Solución

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

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

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top