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

时间:2009-03-10 17:21:39

标签: vbscript network-shares

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

目的是执行两项任务:

  1. 以编程方式导航远程共享文件结构,以确认存在几个远程文件,并将一个文件复制到另一个(两个远程)
  2. 将文件从本地驱动器(使用本地用户名/权限访问)复制到远程驱动器(使用备用凭据访问)
  3. 据我所知,FSO(Scripting.FileSystemObject)不在图片中,因为它始终使用应用程序的凭据运行 - 这将是本地机器用户。(?)

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

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

    有人知道这两种方式,还是知道可行的替代方案? (坚持使用Windows 2000机器上的VBScript / WScript - 没有PowerShell!)

1 个答案:

答案 0 :(得分:32)

好吧,我是在误解下工作 - 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