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

StackOverflow https://stackoverflow.com/questions/631401

  •  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
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top