是否有一种从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!)
好吧,我是在误解下工作 - 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