21

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

目的是执行两项任务:

  1. 以编程方式导航远程共享文件结构,以确认存在几个远程文件,并将一个文件复制到另一个文件(均为远程文件)
  2. 将文件从本地驱动器(使用本地用户名/权限访问)复制到远程驱动器(使用备用凭据访问)

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

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

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

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

4

1 回答 1

35

好的,我在一个误解下工作 - 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
于 2009-03-10T17:53:24.630 回答