Доступ К Общей Сетевой Папке

мне нужно получить доступ через VBA к папке, размещенной на сетевом файловом сервере. Папка доступна в письменной форме только через учетную запись службы (отличную от обычных учетных записей пользователей), для которой у меня есть имя пользователя и пароль.

через пользовательский интерфейс я вижу эту папку и сопоставляю ее как локальный диск, но для доступа к ней в письменной форме мне нужно выйти из Windows и войти в систему через учетную запись службы.

есть ли способ получить доступ к сетевой папке во время обычного сеанса пользователя но hardcoding имя пользователя и pwd в коде VBA?

Я попытался сопоставить папку как локальный диск с:

Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "S:", "corp-serverHostingFolder", False, Username, pwd

но не работал (диск " S " не был сопоставлен). Если вместо этого я делаю то же самое, но без предоставления логина и пароля:

Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "S:", "corp-serverHostingFolder"

Он отлично работает.

теперь интересно, возможно ли то, что я пытаюсь сделать? Если нет, то есть ли альтернатива?

спасибо

1 ответов


Вы можете найти ответ значения в вашем тестировании.

по сути, я бы проверил пару вещей...

  1. убедитесь, что вы еще не подключены к этому ресурсу с помощью текущего зарегистрированного пользователя. Если вы, вы можете получить сообщение об ошибке, как показано ниже: enter image description here

  2. убедитесь, что вы используете domain\username синтаксис в вашем имени пользователя.

в противном случае я думаю, что вы правильное направление. Я собрал некоторый пример кода на основе ссылки выше и смог успешно подключиться к сетевому ресурсу под другим именем пользователя и перебрать список файлов.

(обратите внимание на подсказку, что вам на самом деле не нужно сопоставлять диск, чтобы установить соединение.)

следующий код является очень быстрой (рабочей) реализацией VBA образца, указанного в доступ к сетевому ресурсу из VBScript, например FileSystemObject

Public Sub TestNetShareName()

    Dim NetworkObject As Object
    Dim FSO As Object
    Dim Directory As Object
    Dim Filename As Object
    Dim ServerShare As String
    Dim UserName As String
    Dim Password As String

    ServerShare = "\corp-server\HostingFolder"
    UserName = "mydomain\myuser"
    Password = "freddie123"

    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
        Debug.Print Filename.Name
    Next

    Set Filename = Nothing
    Set Directory = Nothing
    Set FSO = Nothing

    NetworkObject.RemoveNetworkDrive ServerShare, True, False

    Set NetworkObject = Nothing

End Sub