当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从VBScript中访问网络共享,例如FileSystemObject》经验,为你挑选了1个好方法。

是否有一种从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> Tao..:

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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有