首页 文章

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

提问于
浏览
18

是否有一种从VBS脚本中访问网络共享的好方法,使用备用凭据(而不是运行VBS脚本的凭据)?

目的是执行两项任务:

  • 以编程方式导航远程共享文件结构,以确认存在几个远程文件,并将一个文件复制到另一个(两个远程)

  • 将文件从本地驱动器(使用本地用户名/权限访问)复制到远程驱动器(使用备用凭据访问)

据我所知,FSO(Scripting.FileSystemObject)不在图片中,因为它始终使用应用程序的凭据运行 - 这将是本地计算机用户 . (?)

我在google搜索准备批处理文件(或扩展调用“cmd.exe”)时发现的唯一可行的方法,使用“net use”提供远程共享凭据,然后使用robocopy等复制文件,来自同一个命令shell“session” . 这样可以将文件从本地驱动器复制/部署到远程共享,但是以这种方式进行任何类型的文件系统浏览(就像使用FSO一样)都会非常复杂和脆弱 .

我考虑过的另一种可能性涉及两个脚本会话 - 您调用脚本(在命令行中提供备用凭据)并运行cmd.exe会话,该会话首先执行“net use”以将远程共享映射到临时本地驱动器,然后以“实际做东西”模式运行并使用FSO,然后当它完成(返回cmd.exe shell)时,再次使用“net use”断开临时驱动器 . 这是笨重的(多个窗口,临时驱动...),我甚至不确定它会工作 .

有人知道任何一种方式,或知道可行的替代方案吗? (坚持在Windows 2000机器上使用VBScript / WScript - 没有PowerShell!)

1 回答

  • 32

    好吧,我是在误解下工作 - FSO不会“拿起”用“NET USE”(或Wscript.Network“MapNetworkDrive”) Build 的网络凭证 .

    事实证明它确实如此,以下示例代码非常好用(无需设置临时网络驱动器):

    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
    

相关问题