gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:36:27 26 4
gpt4 key购买 nike

是否有一种很好的方法可以使用替代凭据(而不是运行VBS脚本所使用的凭据)从VBS脚本中访问网络共享?

目的是执行两项任务:

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

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

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

    我考虑过的另一种可能性是有两个脚本 session -您调用该脚本(在命令行中提供备用凭据),并且它运行cmd.exe session ,该 session 首先执行“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

    关于vbscript - 从VBScript中访问网络共享,例如FileSystemObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/631401/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com