Доступ к сетевому ресурсу из VBScript, например, FileSystemObject - PullRequest
19 голосов
/ 10 марта 2009

Существует ли хороший способ доступа к сетевым ресурсам из сценария VBS с альтернативными учетными данными (не учетными данными, с которыми работает сценарий VBS)?

Цель состоит в том, чтобы выполнить две задачи:

  1. программно перемещаться по файловой структуре удаленного общего ресурса, чтобы подтвердить, что существует пара удаленных файлов, и скопировать один файл поверх другого (оба удаленных)
  2. копирование файлов с локального диска (доступ с локальным именем пользователя / разрешениями) на удаленный диск (доступ с альтернативными учетными данными)

Насколько я могу судить, FSO (Scripting.FileSystemObject) находится вне поля зрения, потому что он всегда работает с учетными данными приложения, использующего его - который будет пользователем локальной машины. (?)

Единственный жизнеспособный подход, который я нашел при поиске в Google, чтобы подготовить пакетный файл (или расширенный вызов «cmd.exe»), который использует «net use» для предоставления учетных данных удаленного общего ресурса, а затем копирует файлы с помощью robocopy. или тому подобное, из одной и той же командной сессии "сеанс". Это бы хорошо работало для копирования / развертывания файлов с локального диска на удаленный общий ресурс, но было бы очень сложно и хрупко выполнить любой вид просмотра файловой системы (как вы сделали бы с FSO) таким образом.

Другая возможность, которую я рассмотрел, включает в себя два сеанса сценариев - вы вызываете сценарий (предоставляя альтернативные учетные данные в командной строке) и запускаете сеанс cmd.exe, который сначала выполняет «сетевое использование» для сопоставления удаленного общего ресурса. на временный локальный диск, затем запускает себя в режиме «фактически что-то делать» и использует FSO, затем, когда это делается (обратно в оболочке cmd.exe), снова отключает временный диск с помощью «net use». Это неуклюже (несколько окон, временный диск ...), и я даже не уверен, что это сработает.

Кто-нибудь знает, так или иначе, или знает о жизнеспособной альтернативе? (придерживаясь VBScript / WScript на компьютере с Windows 2000 - без PowerShell!)

1 Ответ

33 голосов
/ 10 марта 2009

ОК, у меня возникло неправильное представление - FSO не "подхватит" учетные данные сети, установленные с помощью "NET USE" (или Wscript.Network "MapNetworkDrive").

Оказывается, что это так, и следующий пример кода работает очень хорошо (без необходимости установки временных сетевых дисков):

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
...