簡體   English   中英

從 VBScript 例如 FileSystemObject 訪問網絡共享

[英]Access network share from within VBScript eg FileSystemObject

是否有一種從 VBS 腳本中訪問網絡共享的好方法,使用備用憑據(不是運行 VBS 腳本的憑據)?

目的是執行兩項任務:

  1. 以編程方式導航遠程共享文件結構,以確認存在幾個遠程文件,並將一個文件復制到另一個文件(均為遠程文件)
  2. 將文件從本地驅動器(使用本地用戶名/權限訪問)復制到遠程驅動器(使用備用憑據訪問)

據我所知,FSO(Scripting.FileSystemObject)不在圖片中,因為它始終使用使用它的應用程序的憑據運行 - 這將是本地計算機用戶。(?)

我在谷歌搜索准備使用“net use”提供遠程共享憑據的批處理文件(或對“cmd.exe”的擴展調用)時發現的唯一可行的方法,然后使用 robocopy 等復制文件,來自同一命令外殼“會話”。 這對於將文件從本地驅動器復制/部署到遠程共享來說可以正常工作,但是以這種方式進行任何類型的文件系統瀏覽(就像您使用 FSO 一樣)都會非常復雜和脆弱。

我考慮的另一種可能性涉及兩個腳本會話 - 您調用腳本(在命令行中提供備用憑據)並運行 cmd.exe session,它首先對 Z1D78DC8ED51214E50AEZ8B5 進行“網絡使用”到遠程共享到臨時共享本地驅動器,然后以“實際做事”模式運行並使用 FSO,然后當它完成時(返回 cmd.exe 外殼)再次使用“網絡使用”斷開臨時驅動器。 這很笨重(多個 windows,臨時驅動器......),我什至不確定它會起作用。

有沒有人知道任何一種方式,或者知道可行的替代方案? (堅持 VBScript / WScript 在 windows 2000 機器上 - 沒有 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM