compartilhamento de rede de acesso de dentro VBScript por exemplo FileSystemObject

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

  •  08-07-2019
  •  | 
  •  

Pergunta

Existe uma boa maneira de compartilhamentos de rede de acesso de dentro de um script VBS, com credenciais alternativas (não as credenciais com as quais o script VBS está em execução)?

A intenção é realizar duas tarefas:

  1. programaticamente navegar uma estrutura de arquivo de compartilhamento remoto, a fim de confirmar que um par de arquivos remotos existir, e copiar um arquivo sobre o outro (ambos remoto)
  2. copiar arquivos de uma unidade local (acessado com nome de usuário local / permissões) para uma unidade remota (acessado com as credenciais alternativas)

Tanto quanto eu posso dizer FSO (Scripting.FileSystemObject) está fora de cogitação, porque sempre é executado com as credenciais da aplicação de usá-lo -. (?), Que seria o usuário máquina local

A abordagem única viável-parecendo que eu encontrei enquanto googling para preparar um arquivo de lote (ou chamada estendida para "cmd.exe") que usa "net use" para fornecer as credenciais de compartilhamento remoto, e então copia os arquivos com robocopy ou similar, dentro do mesmo "sessão"-shell de comando. Isso poderia funcionar OK para copiar / implantação de arquivos da unidade local para o compartilhamento remoto, mas seria já muito complicado e frágil para fazer qualquer tipo de navegação do sistema de arquivos (como você faria com FSO) desta forma.

Outra possibilidade que tenho considerado envolve ter duas sessões de script - você chamar o script (fornecendo as credenciais alternativas na linha de comando) e funciona uma sessão cmd.exe, que primeiro faz um "net use" para mapear o compartilhamento remoto para uma unidade local temporária, em seguida, executa-se em um modo "realmente fazer coisas" e usa FSO, em seguida, quando ele é feito (de volta ao shell cmd.exe) desconecta a unidade temporária com "net use" novamente. Esta é desajeitado (várias janelas, unidade temporária ...) e eu nem tenho certeza que ele iria trabalhar.

Alguém sabe de qualquer forma, ou sabe de uma alternativa viável? (Aderindo a VBScript / WScript em um Windows 2000 máquina - não PowerShell)

Foi útil?

Solução

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

Acontece que ele faz, e o seguinte código de exemplo funciona muito bem (sem a necessidade de configurar unidades de rede temporários):

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top