compartilhamento de rede de acesso de dentro VBScript por exemplo FileSystemObject
-
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:
- 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)
- 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)
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