Подтвердить что ты не робот

Доступ к сетевому ресурсу из VBScript, например, FileSystemObject

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

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

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

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

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

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

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

4b9b3361

Ответ 1

ОК, я работал под неправильным пониманием - 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