Acesse o compartilhamento de rede de dentro do VBScript, por exemplo, FileSystemObject

Existe uma boa maneira de acessar os compartilhamentos de rede dentro de um script VBS, com credenciais alternativas (não as credenciais com as quais o script VBS está sendo executado)?

A intenção é realizar duas tarefas:

  1. programaticamente navegar por uma estrutura de arquivo de compartilhamento remoto, a fim de confirmar que existem alguns arquivos remotos e copiar um arquivo sobre o outro (ambos remotos)
  2. copiar arquivos de uma unidade local (acessada com nome de usuário / permissions locais) para uma unidade remota (acessada com as credenciais alternativas)

Tanto quanto eu posso dizer FSO (Scripting.FileSystemObject) está fora de cogitação, porque sempre é executado com as credenciais do aplicativo usando – que seria o usuário da máquina local.

A única abordagem aparentemente viável que encontrei enquanto pesquisei para preparar um arquivo em lote (ou chamada estendida para “cmd.exe”) que usa “net use” para fornecer as credenciais de compartilhamento remoto e copia os arquivos com robocopy ou semelhante , dentro da mesma “session” do shell de comandos. Isso funcionaria bem para copiar / implantar arquivos da unidade local para o compartilhamento remoto, mas seria muito complicado e frágil fazer qualquer tipo de navegação no sistema de arquivos (como faria com o FSO) dessa maneira.

Outra possibilidade que considerei envolve ter duas sessões de script – você chama o script (fornecendo as credenciais alternativas na linha de comando) e executa uma session cmd.exe, que primeiro faz um “net use” para mapear o compartilhamento remoto para um temporário. unidade local, em seguida, executa-se em um modo “realmente fazer coisas” e usa FSO, em seguida, quando é feito (de volta no shell cmd.exe) desconecta a unidade temporária com “net use” novamente. Isso é desajeitado (várias janelas, drive temporário …) e nem tenho certeza se funcionaria.

Alguém sabe de qualquer maneira, ou sabe de uma alternativa viável? (aderindo ao VBScript / WScript em uma máquina com Windows 2000 – não há PowerShell!)

OK, eu estava trabalhando sob um equívoco – que o FSO não iria “pegar” as credenciais de rede estabelecidas com “NET USE” (ou Wscript.Network “MapNetworkDrive”).

Acontece que sim, e o código de exemplo a seguir funciona muito bem (sem precisar configurar unidades de rede temporárias):

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 
Intereting Posts