从VBScript中访问网络共享,例如FileSystemObject

22
有没有一种好的方式可以在VBS脚本内使用备用凭据(而不是VBS脚本正在运行的凭据)访问网络共享?目的是执行两个任务:1.编程导航远程共享文件结构,以确认存在一些远程文件,并将一个文件复制到另一个文件上(都是远程的)。2.从本地驱动器(使用本地用户名/权限访问)复制文件到远程驱动器(使用备用凭据访问)。据我所知,FSO(Scripting.FileSystemObject)不适用,因为它始终以使用它的应用程序的凭据运行 - 这将是本地机器用户。(?)我在谷歌搜索时找到的唯一可行的方法似乎是准备一个批处理文件(或扩展调用“cmd.exe”),使用“net use”提供远程共享凭据,然后使用robocopy或类似工具从同一个命令行“会话”中复制文件。这对于从本地驱动器复制/部署文件到远程共享来说可以正常工作,但是以这种方式进行任何文件系统浏览(就像您使用FSO一样)将非常复杂和脆弱。我考虑的另一个可能性涉及具有两个脚本会话 - 您调用脚本(通过命令行提供备用凭据),它运行一个cmd.exe会话,该会话首先执行“net use”将远程共享映射到临时本地驱动器,然后以“实际执行操作”模式运行自己并使用FSO,然后当它完成(回到cmd.exe shell时)再次使用“net use”断开临时驱动器。这很笨重(多个窗口,临时驱动器...),我甚至不确定它是否能正常工作。有人知道吗?或者知道可行的替代方案?(坚持在windows 2000机器上使用VBScript / WScript - 没有PowerShell!)
1个回答

37

好的,我之前有一个误解,以为文件系统对象(FSO)无法“捕捉”使用“NET USE”(或Wscript.Network “MapNetworkDrive”)建立的网络凭据。

事实证明它确实可以,以下示例代码非常有效(不需要设置临时网络驱动器):

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

一般性的话题:前几天我遇到了另一个与“NET USE”直接相关的问题,这个问题的解决方法可以在以下链接中找到:https://dev59.com/_3A65IYBdhLWcg3wogEb - Tao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接