Доступ к сетевому ресурсу из VBScript, например, FileSystemObject
-
08-07-2019 - |
Вопрос
Есть ли хороший способ доступа к сетевым ресурсам из сценария VBS с альтернативными учетными данными (не учетными данными, с которыми работает сценарий VBS)?
Цель состоит в том, чтобы выполнить две задачи:
<Ол>Насколько я могу судить, FSO (Scripting.FileSystemObject) находится вне поля зрения, поскольку он всегда работает с учетными данными приложения, использующего его - который будет пользователем локального компьютера. (?)
Единственный жизнеспособный подход, который я нашел при поиске в Google, чтобы подготовить пакетный файл (или расширенный вызов "cmd.exe"), использующий "net use" предоставить учетные данные удаленного общего ресурса, а затем скопировать файлы с помощью robocopy или тому подобного из одной и той же командной оболочки " сеанс " ;. Это бы хорошо работало для копирования / развертывания файлов с локального диска на удаленный общий ресурс, но было бы очень сложно и хрупко выполнить любой вид просмотра файловой системы (как вы сделали бы с FSO) таким образом.
Еще одна возможность, которую я рассмотрел, включает в себя два сеанса сценариев - вы вызываете сценарий (предоставляя альтернативные учетные данные в командной строке), и он запускает сеанс cmd.exe, который сначала выполняет «net use» " для сопоставления удаленного общего ресурса с временным локальным диском, а затем запускается в «фактически делать вещи» режим и использует FSO, затем, когда это будет сделано (обратно в оболочку cmd.exe), отключите временный диск с помощью «net use» снова. Это неуклюже (несколько окон, временный диск ...), и я даже не уверен, что это сработает. Р>
Кто-нибудь знает, так или иначе, или знает о жизнеспособной альтернативе? (придерживаться VBScript / WScript на компьютере с Windows 2000 - без PowerShell!)
Решение
Хорошо, у меня возникло неправильное представление о том, что FSO не будет "забирать" сетевые учетные данные, установленные с помощью «NET USE»; (или Wscript.Network " MapNetworkDrive ").
Оказывается, что это так, и следующий пример кода работает очень хорошо (без необходимости настройки временных сетевых дисков):
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