2014-12-02 20 views
6

Potrzebuję uzyskać dostęp za pośrednictwem VBA do folderu hostowanego na serwerze plików sieciowych. Folder jest dostępny na piśmie tylko za pośrednictwem konta usługi (innego niż zwykłe konta użytkowników), dla którego mam nazwę użytkownika i hasło.Dostęp do udostępnionego folderu sieciowego

Za pośrednictwem interfejsu użytkownika mogę zobaczyć ten folder i mapować go jako dysk lokalny, ale aby uzyskać do niego dostęp na piśmie, muszę się wylogować z systemu Windows i zalogować się za pomocą konta usługi.

Czy jest jakiś sposób uzyskania dostępu do folderu sieciowego podczas normalnej sesji użytkownika, ale nazwa użytkownika na twardym dysku i kod pwd w kodzie VBA?

Próbowałem mapowanie folder jako dysk lokalny z:

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

ale nie działa („S” nie został odwzorowany napęd). Jeśli zamiast tego robię to samo, ale bez podawania nazwy użytkownika i hasła:

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

działa idealnie.

Zastanawiasz się teraz, czy to, co próbuję zrobić, jest rzeczywiście możliwe? Jeśli nie, czy jest jakaś alternatywa?

Dzięki

Odpowiedz

5

można znaleźć this answer wartości w swoim testów.

Zasadniczo chciałbym sprawdzić kilka rzeczy ...

  1. Upewnij się, że nie są już podłączone do tego zasobu przy użyciu bieżącego zalogowanego użytkownika. Jeśli jesteś, możesz otrzymać komunikat o błędzie podobny do poniższego: enter image description here

  2. Upewnij się, że używając składni domain\username w swojej nazwy użytkownika.

W przeciwnym razie uważam, że jesteś właściwą drogą. Przygotowałem przykładowy kod na podstawie powyższego linku i udało mi się połączyć z udziałem sieciowym pod inną nazwą użytkownika i powtórzyć listę plików.

(Uwaga końcówkę, że nie mamy do zmapować dysk, aby nawiązać połączenie.)

Poniższy kod jest naprawdę szybkie (pracy) realizacja VBA próbki wymienione w Access network share from within VBScript eg 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 
+0

Świetne rzeczy, dzięki! Ponieważ obecnie pracuję w domu, mogłem tylko wypróbować twój kod przez VPN i nie działałem (zwróciłem błąd "złą nazwę użytkownika lub hasło") .Traktowałem z i bez domeny w nazwie użytkownika. Byłem również w stanie odtworzyć powyższy błąd (wiele połączeń), otwierając folder docelowy za pomocą Explorera. Muszę teraz przetestować kiedy wracam do pracy, ale to ogólnie brzmi dla mnie dobrze i "musi" działać. Jeśli uważasz, że jest coś innego, co mogę spróbować, daj mi znać, inaczej porozmawiajmy w poniedziałek! – cfugge

+0

To działało idealnie dla mnie. Wielkie dzięki za tak czysty kawałek kodu. – cfugge

+0

Hej, ten kod jest niesamowity. Pracował po raz pierwszy bez masowania. Twoje zdrowie! –

Powiązane problemy